< | >

古いPerlプログラムではまる ( jcode.pl )
  • (2023-02-24 16:39:05)

昔のCGIを引っ張り出す


昔、2000年代に公開されていたあるPerlプログラムを久しぶりに使うことになり、再度サーバにアップしてブラウザでアクセスすると「ファイルがありません」という内容のエラーとなった。

久しぶりに試すと動作しない。


CGIのトラブル対応


といえば・・

(1) perlのパス? → #!/usr/local/bin/perl でよい?
(2) 文字コード? → Shift-JIS、UTF-8?
(3) パーミッション? → 700、704、705、755?

・パス問題?
ロリポップのPerlバージョンを調べるために、sshでログインして「perl -v」で調べるとバージョンは「5.30」だった。
ロリポップの説明では「#!/usr/local/bin/perl」でよい。
ちなみに「#!/usr/bin/perl」とすればバージョン「5.16」が使用される、こちらでもOKのはず。
最近Perlはバージョン「7」らしいが、「5」代で問題ないはず。

・文字コード問題?
cgiファイルは「Shift-JIS」で書かれている。
UTF-8にしたところで、動作しないと思うが、念のため書き換えてみたが、こちらも変化なし。

・パーミッション問題?
パーミッションもいろいろ試したが、関係なさそう。

・test.cgi
はたと「そもそもPerl動いている?」と疑問がわき、簡単なPerlプログラムとして「test.cgi」を作成しアップして動作させるとOK、Perlは正常に動作していることを確認した。

・・2時間くらいはまりまくり、この日は断念し、翌日再度試した。


トラブル原因を発見


sshでロリポップサイトにログインしてコンソールからPerlプログラムを起動してみた:

「./test.cgi」 → OK。ブラウザで見てもOKだし、コンソールから起動してもhtmlソースをはき出すのでOK。

そこで、問題のPerlプログラムをコンソールから叩くと下記エラーメッセージがでた:

Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./jcode.pl line 684.

おお~これは・・「jcode.pl」に問題があるとか言ってるぞ・・これはいつか体験したことがあるな~と古い記録を調べたらあった:ロリポップ:ハイスピードへ移行実施


「jcode.pl」問題


「jcode.pl」が、Perl5.3に対応していないようだ。

jcode.pl の682行目辺りのコードを次のように修正する:

684行目から「 defined」をトル
(修正前) &init_z2h_euc unless defined %z2h_euc;
(修正後) &init_z2h_euc unless %z2h_euc;

693行目から「 defined」をトル
(修正前) &init_z2h_sjis unless defined %z2h_sjis;
(修正後) &init_z2h_sjis unless %z2h_sjis;

このわずか2行の修正で動く。


「jacode.pl」で uft-8 が使える


jcode.plの修正でいちおう動作するが「jacode.pl」も試してみた。

jacode.plはjcode.plの後継ライブラリの一つでこちらも動作する、しかも、uft-8をサポートしなかったjcode.plに対してサポートする。

今まで、PerlのフォームメールCGIを使うとき、htmlページも「Shift_JIS」にしていたが、今後は「uft-8」で統一できることが嬉しい。


<< eMMC が非力すぎて Windows Update が迷惑だった話< | >( Celeron G3930 ) 対 ( i5 7500 ) 体感比較テスト >>
search
layout
admin

[▲page top]