ダイヤモンド演算子を使用して、標準入力からのものかファイルからのものかに関係なく、PerlでUTF-8入力を読み取りたいwhile(<>){...}
。
したがって、私のスクリプトは、通常どおり、次の2つの方法で呼び出し可能であり、同じ出力が得られます。
./script.pl utf8.txt
cat utf8.txt | ./script.pl
しかし、出力は異なります!2番目の呼び出し(を使用cat
)のみが設計どおりに機能し、UTF-8を正しく読み取っているようです。スクリプトは次のとおりです。
#!/usr/bin/perl -w
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>){
my @chars = split //, $_;
print "$_\n" foreach(@chars);
}
どちらの場合もUTF-8を正しく読み取るにはどうすればよいですか?<>
できれば、読みにダイアモンド演算子を使い続けたいと思います。
編集:
私はおそらくさまざまな出力を説明する必要があることに気づきました。私の入力ファイルには次のシーケンスが含まれています:a\xCA\xA7b
。cat
正しく出力されるメソッド:
a
\xCA\xA7
b
しかし、他の方法は私にこれを与えます:
a
\xC3\x8A
\xC2\xA7
b