備忘録です。
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;