CGIを設置したところ内部サーバーエラーでどうしても動かず、いろいろ調べて一行目の#!/usr/bin/perlの後に-wをつけたら動くようになりました。が、原因がなんで、なぜこの引数をつけたら動作するのかがわかりません。どういう原因だったんでしょう?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:kanetetu No.1

回答回数2199ベストアンサー獲得回数11

http://allabout.co.jp/career/cgiperl/closeup/CU20040209B/

「CGI・Perl」サイト閉鎖のお知らせ - All About

こちらどうぞ。

id:kurailo

うーん、私の読解力がないのかもしれませんが、こちらでは「なぜ-wをつけただけで動かなかったCGIが動くようになる場合があるのか」が分かりません。やはりこれだけの情報では原因は分からないでしょうか。

2004/03/23 16:43:38
id:asakura-t No.2

回答回数151ベストアンサー獲得回数2

ポイント80pt

http://www.hatena.ne.jp/1080026992#

CGIを設置したところ内部サーバーエラーでどうしても動かず、いろいろ調べて一行目の#!/usr/bin/perlの後に-wをつけたら動くようになりました。が、原因がなんで、なぜこの.. - 人力検索はてな

一行目はshellが処理しているのですが、たいていのshellはLF(UNIXの改行コード)のみ受け付けて、CRLF(Windowsの改行コード)は受け付けないからです。

(正確にはCRを文字として処理しようとしてエラーになってるはず)

PerlはLFでもCRLFでも問題なく動きます。

――以上でよろしいでしょうか?

id:kurailo

なるほど、.cgiファイルをうっかりアスキーモードで転送していなかったようです。今アスキーでやってみたところ、-wスイッチなしでも動きました。情けなや。ただ、どうして-wスイッチつけると動くんだろう・・・

2004/03/23 17:17:50
id:keijis No.3

回答回数19ベストアンサー獲得回数2

ポイント10pt

http://flex.ee.uec.ac.jp/texi/perl/perl_4.html

日本語 perl texinfo - Option

>-w : 識別子に関するさまざまな警告を出す

ということですので、これが動く原因とはならないのではないかと思われますが…

URLのところを参照して他のオプションを試してみるとか

してみたらもしかしするとわかるかも。

id:kurailo

そうなんです。先ほどの回答者の方のおかげで単純なミスだったことが判明はしたんですが、なぜ-wスイッチで直るのかが今度は分からないですね・・・。

2004/03/23 17:18:56
id:kanetetu No.4

回答回数2199ベストアンサー獲得回数11

ポイント20pt

すいませんでした。こちらにもありすが、はっきりとは書いていませんね。

id:doriaso No.5

回答回数770ベストアンサー獲得回数13

ポイント10pt

 URLはダミーですが、

ここのやり取りに、

「#!/usr/bin/perl の後ろに--のような文字をつけると改行コードに関係なく動くようで、実際に自宅サーバーでも動作するようになりました。しかし、#!/usr/bin/perlだけだと動きません。」

という記述があります。

結論が、アスキーモードで転送していなかったということですので、同じケースと考えられないでしょうか。

役に立たなければ、ポイント不要です。

id:Nikki_A No.6

回答回数32ベストアンサー獲得回数0

ポイント10pt

多分、 -w¥r というオプションを渡されたものとperl が解釈しているような気がします。

そして、もともと一文字で指定するオプションは - の後ろの文字一文字目で動作を決めていてその次の文字はなんでもよいみたいです。

コマンドラインから perl -w test.pl とした時と、perl -wa test.pl とした場合で動作が変わらないので。

たぶん、-w だけでなく他の一文字オプションでもいけちゃうかと思いますが、-wは警告が出る以外は動作に影響が出ないので普通にCGIが動いているんでしょうね。

改行モード変換ミスで起きるCGIエラーを回避する、なんてな裏技に使えそうだと思いました(汗

  • id:no1livesforever
    遅かった。

    まあ、ポイントいらないよ。と断って書くつもりだったのですが、
    オプションがついたから解決になったのではなく、
    #!/usr/local/bin/perl
    の直後が改行コードでは無かったというのが
    解決になったのではないかとおもいます。
    実のところ、ただのスペースでも解決になったのではないでしょうか?

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません