- ベストアンサー
Perlの素朴な疑問 二点
一点目 条件分岐構文の中で、 exit 1 というexitのすぐ横に数字があるスクリプトを見ますが、 これは何を意味しているのでしょうか? 二点目 $|=1; というスクリプトがCGIスクリプトの最初のほうに 登場するのをよく見かけますが、 これは何を意味しているのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
お待たせしました。CGI スクリプト自体がバグってこけても、 はたまたその他の原因をスクリプトが検知して正常に異常終了(?)しても、 ウェブサーバ、例えば Apache ではそれを受けて「505 Internal Server Error」 (内部サーバエラー)を返すと思います。 こうしたスクリプトをデバッグするためには Perl デバッガや「-c(構文チェック)」 「-w(警告)」オプションを駆使した単体デバッグのほか、 Apache 自体のエラーログや CGI エラーログを解析してください。
その他の回答 (2)
- nightowl
- ベストアンサー率44% (490/1101)
2番目の参考 URL の尻尾が切れてしまっていました。 以下は Apache のエラー一覧です。他のウェブサーバをお使いならば、 次回からはそれを書き添えられるといいでしょう。どうも失礼しました。
- nightowl
- ベストアンサー率44% (490/1101)
(1)exit 1; 「終了コード」を1にセットしてスクリプトを終了するということです。 通常 exit の戻り値は0です。それ以外の値を書くのは異常終了を表すことが多く、 この終了コードの値を受け取るのは OS の役目です。 (2)$|=1; 「$|」は Perl の特殊変数の一つで、この値を0以外にセットすることで 出力をバッファリングしなくなります。 バッファリングとは、入出力すべきデータが一定量になるまで貯めておき、 1回のシステムコールで入出力をすませるための効率重視の仕組みですが、 一部のウェブサーバではバッファリングするとエラーになる(なった)ため この機能を切っているスクリプトが多いわけです。 しかし、バッファリングしないとサーバに過大な負荷をかけることも間違いないので、 必要な場合のみ書いたほうがよさそうです。 http://tohoho.wakusei.ne.jp/lng/r200005/00050127.htm ところで、こういった記号を検索しようとしても、Google や Yahoo!, goo の検索では ヒットしなかったのではありませんか?記号の検索はできないのですね。
お礼
nightowlさんありがとうございます。 非常によくわかりました。 ですが、一つわからないのが、exit 1における、 終了コードの存在意義です。 このコードのある、ないはどのような影響をもたらすのでしょうか。 $|が特殊変数で、バッファリングさせない意味を持つ、おまじない的な意味があるというのには、納得いたしました。 もし、時間があれば、exitの終了コードの役割、存在意義について教えてください。 宜しくお願い致します。
お礼
ありがとうございます。 大変よくわかりました。 ひとまずApacheのエラーの種類を理解して自分のものにしてしまおうと思います。 ご丁寧に本当にありがとうございました。