目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

File I/Oとか

備忘録です。

Perlベストプラクティスを読んで、ちょっと実験。前の会社のコードは基本方針全部破っていたなあとかふと思った。

PerlのFile I/Oに関する基本方針

  • ファイルハンドルに裸のワードを使用しない
  • 3項のopenを使用する
  • open,closeエラー時は例外を発生させる
  • ファイルの中身は読み込み時にdecode、出力時にencode

encodeを見れば分かりますが、Windowsのコンソールに出力することを前提にしてます。

use strict;
use warnings;
use utf8;

use Encode;
use English;
# open,closeエラー時に例外を発生させる
use Fatal qw (open close);
use Readonly;

Readonly my $FILE_NAME => 'hoge.txt';

# 3項のopenを使用する
# ファイルハンドルに裸のワードを使用しない
open my $FILE, '<', $FILE_NAME;

my $line_num = 1;
# ファイルの中身は読み込み時にdecode
while (my $line = decode_utf8(<$FILE>)) {
    my $text = sprintf "line %3s : %s", $line_num, $line;
    # 出力時にencode
    print encode('shiftjis', $text);
    $line_num++;
}

close $FILE;