June 21, 2007

Time to ditch encoding.pm

Perl でソースコードにマルチバイトなリテラルを埋め込む場合には encoding プラグマを使うのが定石でしたが、

use encoding 'utf-8';
my $name = "宮川達彦";

こうすると STDIO まで utf-8 でエンコード・デコードされるという問題があり、また encoding.pm はファイルスコープで動くのでレキシカルに一部分だけバイト列として扱いたい(という需要があるかどうかは微妙ですが)というときにうまくいかず、イマイチ encoding プラグマを全面採用できず、decode() を使ったり \x{XXXX} で書いたりってことが結構ありました。

が、Juerd と RGARCIA が encoding::sourceencoding::stdio (もとは encoding::split というディストロ)をリリースしてくれたので、この2つを切り分けて利用することができるようになりました。(ソースは utf-8 で書くけどファイルの読み込みはいままでどおり明示的に binmode 指定する etc.)

というわけで上記のような問題になやまされずにリテラルをソースに書くことが出来そう。5.9 からバックポートされたのかなぁ、と思ってソースをみると思いっきり use 5.9.5 が。5.10 のリリースがまたひとつ待ち遠しくなったなぁ。

Posted by miyagawa at June 21, 2007 03:46 AM | Permalink | Comments (3) | TrackBack(0)
Comments

use utf8; との違いが良くわからない。。勉強不足です。

Posted by: hassylin on June 21, 2007 01:29 PM

use utf8; だと、stdin/stdoutに影響しなかったと思います。utf8以外の文字は駄目ですが。

Posted by: Ktat on June 21, 2007 02:27 PM

Ktatさん。私もそう思って、use utf8;とuse encoding::source 'utf-8'の違いが良くわからなくなったのでした。

Posted by: hassylin on June 21, 2007 06:36 PM
Trackbacks
TrackBack URL for this entry: http://blog.bulknews.net/mt3/mt-tb.cgi/2134
Post a comment