Perl5.8以降のEncode

昔はjcode.plとかJcode.pmとか、直感的な文字コード変換モジュールがあったのですが、新しめのPerl*1では標準でEncodeが使えるようになってます。内部文字表現をJavaみたいにUnicodeにしたことに伴い・・・とかですかね。

ちょっととっつきにくい感じがしますが、

と考えれば分かるかな。指定した文字コードに変換するのがエンコード、内部表現に変換するのがデコードみたいな。
とりあえずサンプル。

use Encode;
use Encode::Guess qw/euc-jp shiftjis 7bit-jis/;
use strict;

my $input_str = shift;
my $decoder = Encode::Guess->guess($input_str);
print "name: " . $decoder->name() . "\n";

my $encoded_str = encode('euc-jp', decode("Guess", $input_str));
print "$encoded_str\n";

実行結果

$ perl encode.pl あいうえお
name: shiftjis
、「、、、ヲ、ィ、ェ

*1:というほど新しくもないですけどね