http://allabout.co.jp/career/cgiperl/closeup/CU20040209B/
「CGI・Perl」サイト閉鎖のお知らせ - All About
こちらどうぞ。
http://www.hatena.ne.jp/1080026992#
CGIを設置したところ内部サーバーエラーでどうしても動かず、いろいろ調べて一行目の#!/usr/bin/perlの後に-wをつけたら動くようになりました。が、原因がなんで、なぜこの.. - 人力検索はてな
一行目はshellが処理しているのですが、たいていのshellはLF(UNIXの改行コード)のみ受け付けて、CRLF(Windowsの改行コード)は受け付けないからです。
(正確にはCRを文字として処理しようとしてエラーになってるはず)
PerlはLFでもCRLFでも問題なく動きます。
――以上でよろしいでしょうか?
なるほど、.cgiファイルをうっかりアスキーモードで転送していなかったようです。今アスキーでやってみたところ、-wスイッチなしでも動きました。情けなや。ただ、どうして-wスイッチつけると動くんだろう・・・
http://flex.ee.uec.ac.jp/texi/perl/perl_4.html
日本語 perl texinfo - Option
>-w : 識別子に関するさまざまな警告を出す
ということですので、これが動く原因とはならないのではないかと思われますが…
URLのところを参照して他のオプションを試してみるとか
してみたらもしかしするとわかるかも。
そうなんです。先ほどの回答者の方のおかげで単純なミスだったことが判明はしたんですが、なぜ-wスイッチで直るのかが今度は分からないですね・・・。
すいませんでした。こちらにもありすが、はっきりとは書いていませんね。
URLはダミーですが、
ここのやり取りに、
「#!/usr/bin/perl の後ろに--のような文字をつけると改行コードに関係なく動くようで、実際に自宅サーバーでも動作するようになりました。しかし、#!/usr/bin/perlだけだと動きません。」
という記述があります。
結論が、アスキーモードで転送していなかったということですので、同じケースと考えられないでしょうか。
役に立たなければ、ポイント不要です。
多分、 -w¥r というオプションを渡されたものとperl が解釈しているような気がします。
そして、もともと一文字で指定するオプションは - の後ろの文字一文字目で動作を決めていてその次の文字はなんでもよいみたいです。
コマンドラインから perl -w test.pl とした時と、perl -wa test.pl とした場合で動作が変わらないので。
たぶん、-w だけでなく他の一文字オプションでもいけちゃうかと思いますが、-wは警告が出る以外は動作に影響が出ないので普通にCGIが動いているんでしょうね。
改行モード変換ミスで起きるCGIエラーを回避する、なんてな裏技に使えそうだと思いました(汗
うーん、私の読解力がないのかもしれませんが、こちらでは「なぜ-wをつけただけで動かなかったCGIが動くようになる場合があるのか」が分かりません。やはりこれだけの情報では原因は分からないでしょうか。