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分くらい早くなった