CGI Perl 2017年02月08日 13:13 編集
perlのバージョンが新しくなったらCGIが動かなくなったという書き込みがサポート掲示板にあった。
Perl5.24ということだが、ローカルでCGIのテストに使っているXamppは最新版でもPerlのバージョンはは5.16なので、5.24での動作が確認できない。
Xamppの環境でこのActivePerlが使えるのかわからないが、取りあえずインストールしてみる。
XamppでPerlがインストールされているC:\xampp\perlに直接インストールしたいところだが、ダウンロードしたActivePerlのインストーラーはインストール先を変更できないようだ(それとも見落としたか?)
また、64bit版のインストーラーを使ったので、C:\Perl64というフォルダにインストールされてしまう。
取りあえずこれをXamppでインストールされたC:\xampp\perlフォルダにコピーすることにする。C:\xampp\perlは別名に変更してバックアップしておき、C:\Perl64の中身をすべてC:\xampp\perlにコピーしてみた。
これだけでうまくいくはずないよなと思ってCGIを実行してみると、あっさりと動いてしまって拍子抜けした。
エラーログを見てみるとjcode.plで
ダウンロードする。このうちjacode.plをjcode.plに置き換えればいいようだ。jcode.plを使っていたCGIでは
そのまま互換性があるのかよくわからないが、とりあえずエラーは出なくなった。
調べてみると同じ原因でエラーが出るCGIがけっこうあったので、すべて更新する必要があるようだ。
例によってCPANでJcode.pmを検索し、ダウンロードしたJcode-2.0*.tar.gzを解凍し、Jcode.pmとJcodeフォルダをライブラリフォルダに入れておく。jcode.plが./libフォルダ内にあったなら、そこに入れておく。
元のCGIで
そしてjcode::またはjcode::となっている部分をすべてJcode::に変更する。
Perl5.24ということだが、ローカルでCGIのテストに使っているXamppは最新版でもPerlのバージョンはは5.16なので、5.24での動作が確認できない。
Perlを5.24にアップデート
単体ではWindows用ActivePerlの5.24が公開されている。Xamppの環境でこのActivePerlが使えるのかわからないが、取りあえずインストールしてみる。
XamppでPerlがインストールされているC:\xampp\perlに直接インストールしたいところだが、ダウンロードしたActivePerlのインストーラーはインストール先を変更できないようだ(それとも見落としたか?)
また、64bit版のインストーラーを使ったので、C:\Perl64というフォルダにインストールされてしまう。
取りあえずこれをXamppでインストールされたC:\xampp\perlフォルダにコピーすることにする。C:\xampp\perlは別名に変更してバックアップしておき、C:\Perl64の中身をすべてC:\xampp\perlにコピーしてみた。
これだけでうまくいくはずないよなと思ってCGIを実行してみると、あっさりと動いてしまって拍子抜けした。
print $];でPerlのバージョンを確認してみると、無事
5.024001と表示され、5.24にアップデートできたことが確認できた。
jcode.plのエラー
Perlをバージョン5.24にアップデートできたので、エラーが出るというCGIを実行してみると確かにエラーが出て実行できない。エラーログを見てみるとjcode.plで
Can't use 'defined(%hash)'というようなエラーが出ているようだ。確かにこの日本語変換ライブラリのjcode.plはかなり昔に書かれたものなので、最新のPerlで動かなくなっても不思議ではないかもしれない。Kent-Webなどで公開されているCGIを見てみるとjcode.plの後継ライブラリというjacode.plが使われているようだ。
jacode.plに更新
CPAN http://search.cpan.org/~ina/jacode/で最新版が公開されているようなので、ダウンロードする。このうちjacode.plをjcode.plに置き換えればいいようだ。jcode.plを使っていたCGIでは
require './lib/jcode.pl'というようなjcode.plを読み込んでいる部分を
require './lib/jacode.pl'に変更する。
そのまま互換性があるのかよくわからないが、とりあえずエラーは出なくなった。
調べてみると同じ原因でエラーが出るCGIがけっこうあったので、すべて更新する必要があるようだ。
Jcode.pmを使用する
いまさらだけど、jcode.plのエラーを避けるためにjacode.plに更新ではなく、Jcode.pmを使うという方法もあるようなので追記しておく。Jcode.pmは最近はサーバーのほうに標準モジュールとしてインストールされているケースが多いようだが、Xampp同梱のPerlには入っていないようだ。なのでJcode.pm使う前提で公開するCGIにはライブラリディレクトリに入れておくのが無難のようだ。例によってCPANでJcode.pmを検索し、ダウンロードしたJcode-2.0*.tar.gzを解凍し、Jcode.pmとJcodeフォルダをライブラリフォルダに入れておく。jcode.plが./libフォルダ内にあったなら、そこに入れておく。
元のCGIで
require './lib/jcode.pl';という部分があったら
use lib './lib';と変更する。条件分岐する場合は
use Jcode;
use lib './lib';などとする必要がある。useはコンパイル時に実行されるので、if文の中に直接use Jcode;を書くと、if文の条件にかかわらずuse Jcode;が実行されてしまうからだ。
if ($use_jcodepm) {
eval 'use Jcode;';
} else {
require 'jacode.pl';
}
そしてjcode::またはjcode::となっている部分をすべてJcode::に変更する。
counter:29,141