日本語の扱いについては慣例的にjcode.plに頼りきりだったのですが、Encodeモジュールとやらを使ってみようかと。ところが、こいつがなかなか曲者で、jcode.plに慣れていると大変かも知れません。
今後はEncodeモジュールにするべきでしょうし、jcode.plが不要になるということもあって、少しだけ使ってみました。
まず
use utf8; use Encode; use encoding 'utf8';としてEncodeモジュールを読み込んでおきます。
#ファイルからの読み込み open (READFILE, "<:encoding(shiftjis)", "< sjis.txt"); #ファイルへの書き込みという感じでshift-jisからeuc-jpへの変換が行えます。
open (WRITEFILE, ">:encoding(euc-jp)", "> euc.txt"); while(my $line = <READFILE>) { print WRITEFILE, $line; } close (WRITEFILE); close (READFILE);
ポイントとしては入力ファイルを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);
とすることもできます。
とおりすがり
CPANの Sjis.pm, jacode.pl が便利ですよ!!
最近は全部これで書いてます