Perl でソースコードにマルチバイトなリテラルを埋め込む場合には encoding プラグマを使うのが定石でしたが、
use encoding 'utf-8'; my $name = "宮川達彦";
こうすると STDIO まで utf-8 でエンコード・デコードされるという問題があり、また encoding.pm はファイルスコープで動くのでレキシカルに一部分だけバイト列として扱いたい(という需要があるかどうかは微妙ですが)というときにうまくいかず、イマイチ encoding プラグマを全面採用できず、decode() を使ったり \x{XXXX} で書いたりってことが結構ありました。
が、Juerd と RGARCIA が encoding::source と encoding::stdio (もとは encoding::split というディストロ)をリリースしてくれたので、この2つを切り分けて利用することができるようになりました。(ソースは utf-8 で書くけどファイルの読み込みはいままでどおり明示的に binmode 指定する etc.)
というわけで上記のような問題になやまされずにリテラルをソースに書くことが出来そう。5.9 からバックポートされたのかなぁ、と思ってソースをみると思いっきり use 5.9.5 が。5.10 のリリースがまたひとつ待ち遠しくなったなぁ。
use utf8; との違いが良くわからない。。勉強不足です。
Posted by: hassylin on June 21, 2007 01:29 PMuse utf8; だと、stdin/stdoutに影響しなかったと思います。utf8以外の文字は駄目ですが。
Posted by: Ktat on June 21, 2007 02:27 PMKtatさん。私もそう思って、use utf8;とuse encoding::source 'utf-8'の違いが良くわからなくなったのでした。