Perl Xampp 2020年11月10日 12:06   編集
Xamppに同梱されているPerlはバージョンが古いので、ActivePerlの最新版に入れ替えていたが、ActivePerlよりさらに新しいバージョンが公開されているStrawberryPerlに入れ替えてみた。(現在ActivePerlの最新版は5.28だが、StrawberryPerlでは5.32が出ている。)

http://strawberryperl.com/から最新版のstrawberry-perl-5.32.0.1-64bit.msiをダウンロードする。インストール先を指定できるので、今まで使っていたC:\xampp\perlにインストールしてみたが、なんかうまくいかない(c:\usr\local\bin\perlがperl.exeのパスになるためには、C:\xampp\perlではなくC:\xamppにインストールすべきだったような感じ)。
結局C:\xampp\perlは元に戻して、デフォルトのインストール先C:\Strawberryにインストールすることにした。
元々c:\usr\local\bin\perlでperlを参照できるようC:\usr\localC:\xampp\perlのシンボリックリンクを作成していたが、このリンク先をC:\Strawberry\perlに変更すればいいはずだ。すでに作成済みのシンボリックリンクがある場合はいったん削除しておかないと作れないようだ。管理者モードでコマンドプロンプトを起動し、
rmdir C:\usr\local
で既存のシンボリックリンクを削除してから
mklink /D "c:\usr\local" "C:\Strawberry\perl"
を実行して新たなシンボリックリンクを作成する。こうしておけばActivePerlに戻したいときはリンク先を元のC:\xampp\perlに変えれば元に戻せる。

print $];
を実行すると
5.032000
と表示される。無事にアップデートできたようだ。
ところがコマンドプロンプトから
perl -v
で確認すると、5.28ということになってしまうが、古いActivePerlも残したままにしている関係だろうか。CGIの実行には関係なさそうなので、そのままにしておいてもたいした問題ではないとは思うが、いちおう「アプリと機能」で古いActivePerl5.28をアンインストールした。するとコマンドラインでも5.32と表示されるようになった。ただしXamppフォルダに残しておいたC:\xampp\perlフォルダごと消えてしまった。この方がすっきりするか。もちろんC:\usr\localのシンボリックも変更済みなので、CGIの実行にも支障はない。

やはりデフォルトではJcodeモジュールなどが入っていないようで、エラーになるCGIがある。StrawberryPerlではCPANからモジュールインストールもできるらしいが、ActivePerlの時と同じようにC:\xampp\perl\libのJcodeフォルダ、Jcode.pmをC:\Strawberry\perl\libにコピーすると認識されたのでそれで良しとする。

その他の部分では5.24や5.26にアップデートしたときのような問題はなさそうだ。


5.26以前からアップデートしたら、@INCにカレントディレクトリが含まれなくなった仕様変更に引っかかるかもしれない。
require 'init.cgi';
でエラーになったら
require './init.cgi';
と変更するか、スクリプトの最初のほうで
push(@INC,'.');

use lib '.';
または
use FindBin;
use lib $FindBin::Bin;
を追加して、@INCにカレントディレクトリを追加すればいい。
counter:2,123