標準入力とコマンド行引数からの入力を<>で受けるときの違い †perl で perl script.pl foo.txt と perl script.pl < foo.txt。<>で受けるときは同じと思っていたけれど違うときもあった。 binmode STDIN, ":encoding(Shift_JIS)"; binmode STDOUT, ":encoding(utf8)"; while(<>){ print }; たとえば入力テキスト よだかは、実にみにくい鳥です。 顔は、ところどころ、味噌(みそ)をつけたようにまだらで、くちばしは、ひらたくて、耳までさけています。 足は、まるでよぼよぼで、一間(いっけん)とも歩けません。 ほかの鳥は、もう、よだかの顔を見ただけでも、いやになってしまうという工合(ぐあい)でした。 に対し perl script.pl foo.txt と perl script.pl < foo.txt では結果が違う。 perl 5.8.8 でlinux,Windows共に再現する。 use utf8 は require した先への効果 †スクリプトfoo.plで use utf8; require bar.pl したときに bar.plの文字列にはutf8フラグはつかない。 foo.pl use utf8; $a = "テスト"; $b = "テスト"; #require "bar.pl"; print "\$a:", utf8::is_utf8($a)?"utf8 flag\n":"no flag\n"; print "\$b:", utf8::is_utf8($b)?"utf8 flag\n":"no flag\n"; bar.pl $b = "テスト"; |