古い jcode.pl の修正方法

Perl のバージョンが 5.10 くらいまでは jcode.pl 同梱された CGI を使うことも多かったようですが、もう最近ではあまり見なくなりましたね。

サーバーに入っている Jcode.pm を使うのが普通だと思いますが、お客様のサーバー移転のために色々調査していて久しぶりに見かけました。
Perl のバージョンが 5.16 くらいに上がるとエラーを吐くようです。
うーん、どうしたもんか・・・。

defined(%hash) is deprecated at jcode.pl line ~

ネットに修正方法があったので、ポイントを転記しておきます。
どのサイトでも同じことを書いてますが、該当箇所はここ。

sub z2h_euc サブルーチン内
&init_z2h_euc unless defined %z2h_euc_inited;

sub z2h_sjis サブルーチン内
&init_z2h_sjis unless defined %z2h_sjis_inited;

いずれも、”unless defined %~” というのを使っています。ここがポイントです。これが引っかかっていますので、書き方を修正します。

修正は簡単で、”unless defined %” → “if !%” に書き換えるだけ。

sed コマンドでワンライナーでいけます。

sed -i "s/unless defined %/if \!%/g" jcode.pl