常識を文書化する努力

httpd上でperlを動かす際にソース1行目に書く実行バイナリ指定の、

#!/usr/bin/perl

に関して。

ローカルで動作確認が取れているがhttpd上で動かない場合は、「"--"を最後に付加すると動く」というオマジナイがある。この原因はWindowsPOSIXの改行コードの違いから起きている、という話し。

なので、perlコマンドラインオプションの終了を告げる"--"を明示的に指定してやらないと、[CR]の部分をコマンドラインオプションの一部だと解釈して動かなくなる、ということらしい。

"--"自体がどういう意味なのかperl.comから辿れるHow To Execute the Perl InterpreterのDESCRIPTIONで調べてみたんだが、書かれてないみたいだ。SYNOPSISでは、

perl [ -sTtuUWX ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ -D[number/list] ] [ -pna ] [ -Fpattern ] [ -l[octal] ] [ -0[octal/hexadecimal] ] [ -Idir ] [ -m[-]module ] [ -M[-]'module...' ] [ -f ] [ -C [number/list] ] [ -P ] [ -S ] [ -x[dir] ] [ -i[extension] ] [ -e 'command' ] [ -- ] [ programfile ] [ argument ]...

と、[programfile], [argument]の前におかれているので、空気を読んでコマンドラインオプションの終了という意味で取ってみた。

対処法としては、改行コードをきちんと変換してからhttpdに渡してやる、しかない。ftpを使っているのなら、ftpdもしくはftpクライアントの設定を見直してみる、そうでないのなら手で変換をかけてやる、かな?