読者です 読者をやめる 読者になる 読者になる

はちゅにっき

こっちのブログはまったり更新

jperl と jcode.pl から卒業する

何をいまさらな話題ですが、文字コードEUC-JP が主流だった時代に作られた jperl と jcode.pl に依存しているレガシーなシステムをモダンな Perl に書き換える場合には、Encode に加えて Encode::EUCJPMS を使うと簡単でした。
というメモ。

Encode-EUCJPMS
http://search.cpan.org/~naruse/Encode-EUCJPMS/

これで機種依存文字を恐れず処理することができました。

Unicode にさえなってしまえば後はやり放題で、日本語の「全角←→半角」変換などは Lingua::JA::Regular::Unicode が便利でした。

Lingua-JA-Regular-Unicode
http://search.cpan.org/~tokuhirom/Lingua-JA-Regular-Unicode/
use utf8;
use Encode::EUCJPMS;
use Encode ( );

# eucJP-ms な DB から値を取得して
my $row = $sth->fetchrow_hashref( );

# Perl の世界に decode して
my $utf8 = Encode::decode('eucJP-ms', $row->{japanese});

...
# なんか処理して
...

# eucJP-ms で戻してあげる
$dbh->execute(Encode::encode('eucJP-ms', $japanese));

こんな感じ。
ちなみに、今回は DB からいろいろ取得して、文字列処理をして DB に戻す。という、だいたい完了まで 30分くらい処理にかかるようなスクリプトを書き直したのですが、書き直した後も実行時間は特に変わらず *1 Encode でいったん EUC-JP から Unicode に変換し、再び EUC-JP に戻すこと自体はパフォーマンス的なマイナスはないと思います。
むしろ jperl から脱却することによるメリットの方がおおきいですね。
これで「触らぬ Script に障害なし」とか言う謎の遺言からも解放です。
わーい。楽ちんですね。

*1:実際は 5分くらい早くなった