Perl 5.8では、内部でUTF-8の文字コードを使うように なったが、ファイルがどの文字コードで書かれているのかを きちっと指定しないと、文句を言われることがある。
use utf8;をスクリプトの初めに入れる。こうしておけば、検索の文字として 日本語なども使える。
binmode STDIN, ":utf8"; binmode STDOUT, ":utf8";
open(FH, "<:utf8", $filename);
open(FH, "<:encoding(shiftjis)", $filename);
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
while(<>){
print "¥t", $_ if /あ/;
}
print "--- open utf.txt ---¥n";
open(FH, "<:utf8", "utf.txt" ) or die "Cannot open file¥n";
while(<FH>){
print;
}
close FH;
print "--- open sj.txt ---¥n";
open(FH, "<:encoding(shiftjis)", "sj.txt" ) or die "Cannot open file¥n";
while(<FH>){
print;
}
close FH;
perl utf.pl <utf.txtと実行する。
use encoding 'utf8' STDIN=>'utf8';
を用いると、標準入力がUTF-8で書かれていることがきっちり認識されていない。 特に、頻繁に英文字と日本語が切り替わるようなファイルを 読み込むと、次のようなエラーが出る。
utf8 "¥xE3" does not map to Unicode at bad.pl line 6.