MacPortsでApache入れたら、その副作用(依存関係)でPerl 5.16 も入った。
それで、あれ、このPerlをシステムApacheから参照できるんじゃね? と思ってやってみた。
/usr/bin/perl
ここに、システムPerlがあるわけだけど、ちと荒っぽいが、これをリネームして別の名前にする。
cd /usr/bin/perl
sudo mv perl perl_original
そして、そこに後釜(シンボリックリンク)を作成
ln -s /opt/local/bin/perl perl
これで、シンボリックリンクが張られて、 /usr/bin/perl にアクセスすると、 /opt/local/bin/perl へ飛ばされるということに。
うまくいくかどうかCGIのページにアクセスしたら、できてた!これで、シバン行(Perlの最初の行 #!/usr/bin/perl ) を一切いじらずに、別バージョンのPerlを参照させることができた!
しかし、これだと、5.16の方は5.8に入れてあったモジュールが入っていないため、動かないCGIも多々ある。
だから足りないモジュールを入れていけばいいのdが、それを手動でやるとミスのもとなので、モジュールをExtUtils::Installedを使って吐き出させてやる。
perl -MExtUtils::Installed
-e 'map {print $_."\n"} ExtUtils::Installed->new->modules' > cpanlist.txt
このモジュールの掃き出しは、一度古いPerlに戻る必要がある。ので、.bash_profileにMacPortsが書き加えたパスを適宜コメントアウトなどで処理。
これで、掃き出し、これをcpanmに食わせる。あ、5.18の方にcpanmをインストールしておく必要がある。
cpanm < cpanlist.txt
この処理は、新しいPerlでやる必要があるので、、.bash_profileのコメントアウトをふたたびもとに戻す。
これで、必要はモジュールは全部入った!はず!と思ったが、下記は手動で入れないとだめだった。なぜ?(コアモジュールからはずされた?それともcpanを使わずに入れたとか?)
- Class::Accessor::Fast
- URI::Escape
- LWP::UserAgent
- Date::Calc
- DBI
- DBD::SQLite
これらが入らなかった理由はよくわからないけど、CPANにインストールの履歴が残っていなかったということだと思う。
これだと、旧Perlで使っていたモジュールがすべて入ったかどうかは心もとないが、まあそこはゆくゆく検証していく。
それからいままで入れていなかったけど、
- JSON::XS
も入れてみたら、入った!