これ、Perl 5 Porterとしてちょっと申し訳ないケース。
[を] Perl 標準入力と utf8しかし、test.pl < utf8.txtは行けるが、test.pl utf8.txtはだめ。
ここで問題になっているのは、<>
でファイルを指定した場合も標準入力の場合のどちらの場合もPerlIO Layerを指定する方法。
先に答を書いてしまうと、
use open ':utf8'; binmode STDIN, ':utf8'; binmode STDOUT, ':utf8';
ということになる。
odz buffer - それ use openとりあえずuse open IN => ':utf8';とするほうが、スマートといえばスマートか?
やってみればわかるけど、残念ながらこれだけでは標準入力の場合がNG。なぜならuse openはこれからopenするものに関しては働くけど、すでにopen
されているSTDIN
やSTDOUT
には働かないから。
理念から行くと、
binmode ARGV, ':utf8';
で行くのが理想なのだが、これも残念ながらうまく行かない。use warnings
な状態で
binmode() on unopened filehandle ARGV
とwarningが出てしまう。
あと、コマンドラインオプションで、-CIO
をつけるという手があるが
perl -CIO ...
はOKでも
#!/usr/bin/perl -CIO
はうまく行かない。-C
に関してはperldoc perlrun
を参照のこと。
Dan the Perl 5 Porter
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。