• ベストアンサー

Perlの素朴な疑問 二点

一点目 条件分岐構文の中で、 exit 1 というexitのすぐ横に数字があるスクリプトを見ますが、 これは何を意味しているのでしょうか? 二点目 $|=1; というスクリプトがCGIスクリプトの最初のほうに 登場するのをよく見かけますが、 これは何を意味しているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

お待たせしました。CGI スクリプト自体がバグってこけても、 はたまたその他の原因をスクリプトが検知して正常に異常終了(?)しても、 ウェブサーバ、例えば Apache ではそれを受けて「505 Internal Server Error」 (内部サーバエラー)を返すと思います。 こうしたスクリプトをデバッグするためには Perl デバッガや「-c(構文チェック)」 「-w(警告)」オプションを駆使した単体デバッグのほか、 Apache 自体のエラーログや CGI エラーログを解析してください。

参考URL:
http://www.atmarkit.co.jp/flinux/rensai/apache13/apache13a.html,http://www.inoueworld.gr.jp/gna/faq/faq_errormessage.htm

その他の回答 (2)

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.3

2番目の参考 URL の尻尾が切れてしまっていました。 以下は Apache のエラー一覧です。他のウェブサーバをお使いならば、 次回からはそれを書き添えられるといいでしょう。どうも失礼しました。

参考URL:
http://www.inoueworld.gr.jp/gna/faq/faq_errormessage.html
shevy
質問者

お礼

ありがとうございます。 大変よくわかりました。 ひとまずApacheのエラーの種類を理解して自分のものにしてしまおうと思います。 ご丁寧に本当にありがとうございました。

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.1

(1)exit 1; 「終了コード」を1にセットしてスクリプトを終了するということです。 通常 exit の戻り値は0です。それ以外の値を書くのは異常終了を表すことが多く、 この終了コードの値を受け取るのは OS の役目です。 (2)$|=1; 「$|」は Perl の特殊変数の一つで、この値を0以外にセットすることで 出力をバッファリングしなくなります。 バッファリングとは、入出力すべきデータが一定量になるまで貯めておき、 1回のシステムコールで入出力をすませるための効率重視の仕組みですが、 一部のウェブサーバではバッファリングするとエラーになる(なった)ため この機能を切っているスクリプトが多いわけです。 しかし、バッファリングしないとサーバに過大な負荷をかけることも間違いないので、 必要な場合のみ書いたほうがよさそうです。 http://tohoho.wakusei.ne.jp/lng/r200005/00050127.htm ところで、こういった記号を検索しようとしても、Google や Yahoo!, goo の検索では ヒットしなかったのではありませんか?記号の検索はできないのですね。

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Tokushu,http://x68000.startshop.co.jp/~68user/webcgi/buffering.html
shevy
質問者

お礼

nightowlさんありがとうございます。 非常によくわかりました。 ですが、一つわからないのが、exit 1における、 終了コードの存在意義です。 このコードのある、ないはどのような影響をもたらすのでしょうか。 $|が特殊変数で、バッファリングさせない意味を持つ、おまじない的な意味があるというのには、納得いたしました。 もし、時間があれば、exitの終了コードの役割、存在意義について教えてください。 宜しくお願い致します。

関連するQ&A