FrontPage

標準入力とコマンド行引数からの入力を<>で受けるときの違い

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 = "テスト";

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-12-29 (水) 16:26:12 (4864d)