Perl5.8の日本語処理

Perlも5.8でマルチバイト文字への対応がされてます。Encodeモジュールが実装されたり、UTF-8に対応したり・・・。
日本語の扱いについては慣例的にjcode.plに頼りきりだったのですが、Encodeモジュールとやらを使ってみようかと。ところが、こいつがなかなか曲者で、jcode.plに慣れていると大変かも知れません。
今後はEncodeモジュールにするべきでしょうし、jcode.plが不要になるということもあって、少しだけ使ってみました。


まず
use utf8;
use Encode;
use encoding 'utf8';
としてEncodeモジュールを読み込んでおきます。


#ファイルからの読み込み
open (READFILE, "<:encoding(shiftjis)", "< sjis.txt");

#ファイルへの書き込み
open (WRITEFILE, ">:encoding(euc-jp)", "> euc.txt"); while(my $line = <READFILE>) { print WRITEFILE, $line; } close (WRITEFILE); close (READFILE);
という感じでshift-jisからeuc-jpへの変換が行えます。
ポイントとしては入力ファイルをopenした時に既に文字コードを指定していますので、
$lineに格納される時点では内部コードとして取り扱われている、
そしてprintで出力ファイルに書き出すときにeuc-jpへの変換が行われている・・・ということ。

この辺が取り扱いの面からjcode.plと大きく違う部分です。

今までどおり、文字列をオクテット列として扱う場合は
#ファイルからの読み込み
open (READFILE, "<:bytes", "< sjis.txt");

#ファイルへの書き込み
open (WRITEFILE, ">:bytes", "> euc.txt");

while(my $line = <READFILE>) {
    $line = encode("euc-jp", decode("shiftjis", $line));
    print WRITEFILE, $line;
}

close (WRITEFILE);
close (READFILE);

とすることもできます。