perl 5.2.4.1のエラーについて

2017.12.12

Debian Stretch でperlで記述したcgiのプログラムが動かなくなった。/var/log/apache2/error.logを見ると
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at /usr/share/perl5/jcode.pl line 684
という記述があったので検索。よくわからないけど

http://icepotato.cocolog-nifty.com/blog/2014/04/jcodepldefinedh.html


を見たら解決。
/usr/share/perl5/jcode.plの次のところを修正

修正前
sub z2h_euc {
    local(*s, $n) = @_;
    &init_z2h_euc unless defined %z2h_euc;
    $s =~ s/($re_euc_c|$re_euc_kana)/
    $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
    /geo;
    $n;
}

sub z2h_sjis {
    local(*s, $n) = @_;
    &init_z2h_sjis unless defined %z2h_sjis;
    $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
    $n;
}

修正後
sub z2h_euc {
    local(*s, $n) = @_;
    &init_z2h_euc if !%z2h_euc;
    $s =~ s/($re_euc_c|$re_euc_kana)/$z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1/geo;
    $n;
}

sub z2h_sjis {
    local(*s, $n) = @_;
    &init_z2h_sjis if !%z2h_sjis;
    $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
    $n;
}