Windows+Apache+perlで #!/usr/bin/perl なCGIを動かす2021年04月26日 01:49

これまで、WindowsではActivePerlを使っていました。
でも今は Strawberry Perl のほうがいいみたいなので乗り換えました。

Perlのスクリプトのshebang行は通常

#!/usr/bin/perl

にしてますよね。Apacheはこれを読んで /usr/bin/perl を起動しようとするので、Windowsでもこのパスで perl.exe が起動するようにしないとCGIが動きません。

ActivePerlを使っていたときは、ActivePerlの bin フォルダにpathを通したうえで、ActivePerlの perl.exe を C:\usr\bin フォルダにコピーすればOKでした(コピーではなくシンボリックリンクでも良かったかも)。

しかし、Strawberry Perl ではそれではダメでした。C:\usr\bin に perl.exe をシンボリックリンクしてbash等から /usr/bin/perl script.pl を実行するとエラーなく動くのに、なぜかApacheでは 500 Internal Server Error になります。

で、いろいろ試行錯誤してたどり着いたのが、ApacheのScriptInterpreterSourceディレクティブを使うことでした。これはCGIファイルのshebang行(スクリプト先頭の#!で始まる行)を無視して拡張子のみ(.pl や .cgi)でスクリプトファイルを関連付け実行できるというものです。httpd.conf で対象ディレクトリに ScriptInterpreterSource registry を記述してみたら、無事、Apacheで#!/usr/bin/perlなCGIが動くようになりました。

めでたしめでたし

…が、以下の謎があります。

・ レジストリの設定も関連付けもしなくても動いちゃう。え?なんで?
・ C:\usr\bin\perl はやっぱり無いとダメ。なんで?

ま、動いてるから、いっか…

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://itagaki.asablo.jp/blog/2021/04/26/9370989/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。