質問

質問者:shevy Perlの素朴な疑問 二点
困り度:
  • 暇なときにでも
一点目
条件分岐構文の中で、
exit 1
というexitのすぐ横に数字があるスクリプトを見ますが、
これは何を意味しているのでしょうか?


二点目
$|=1;
というスクリプトがCGIスクリプトの最初のほうに
登場するのをよく見かけますが、
これは何を意味しているのでしょうか?
質問投稿日時:03/05/21 13:11
質問番号:553555
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:nightowl 2番目の参考 URL の尻尾が切れてしまっていました。
以下は Apache のエラー一覧です。他のウェブサーバをお使いならば、
次回からはそれを書き添えられるといいでしょう。どうも失礼しました。
種類:アドバイス
どんな人:一般人
自信:自信あり
回答日時:03/05/23 11:31
回答番号:No.3
参考URL: http://www.inoueworld.gr.jp/gna/faq/faq_errormessage.html
この回答へのお礼ありがとうございます。

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

ご丁寧に本当にありがとうございました。

回答

良回答20pt

回答者:nightowl お待たせしました。CGI スクリプト自体がバグってこけても、
はたまたその他の原因をスクリプトが検知して正常に異常終了(?)しても、
ウェブサーバ、例えば Apache ではそれを受けて「505 Internal Server Error」
(内部サーバエラー)を返すと思います。

こうしたスクリプトをデバッグするためには Perl デバッガや「-c(構文チェック)」
「-w(警告)」オプションを駆使した単体デバッグのほか、
Apache 自体のエラーログや CGI エラーログを解析してください。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:03/05/23 11:27
回答番号:No.2
参考URL: http://www.atmarkit.co.jp/flinux/rensai/apache13/apache13a.html​, 
http://www.inoueworld.gr.jp/gna/faq/faq_errormessage.htm
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:nightowl (1)exit 1;
「終了コード」を1にセットしてスクリプトを終了するということです。
通常 exit の戻り値は0です。それ以外の値を書くのは異常終了を表すことが多く、
この終了コードの値を受け取るのは OS の役目です。

(2)$|=1;
「$|」は Perl の特殊変数の一つで、この値を0以外にセットすることで
出力をバッファリングしなくなります。
バッファリングとは、入出力すべきデータが一定量になるまで貯めておき、
1回のシステムコールで入出力をすませるための効率重視の仕組みですが、
一部のウェブサーバではバッファリングするとエラーになる(なった)ため
この機能を切っているスクリプトが多いわけです。

しかし、バッファリングしないとサーバに過大な負荷をかけることも間違いないので、
必要な場合のみ書いたほうがよさそうです。
http://tohoho.wakusei.ne.jp/lng/r200005/00050127.htm

ところで、こういった記号を検索しようとしても、Google や Yahoo!, goo の検索では
ヒットしなかったのではありませんか?記号の検索はできないのですね。
種類:アドバイス
どんな人:一般人
自信:自信あり
回答日時:03/05/21 14:50
回答番号:No.1
参考URL: http://tohoho.wakusei.ne.jp/wwwperl1.htm#Tokushu​, 
http://x68000.startshop.co.jp/~68user/webcgi/buffering.html
この回答へのお礼nightowlさんありがとうございます。

非常によくわかりました。
ですが、一つわからないのが、exit 1における、
終了コードの存在意義です。

このコードのある、ないはどのような影響をもたらすのでしょうか。

$|が特殊変数で、バッファリングさせない意味を持つ、おまじない的な意味があるというのには、納得いたしました。

もし、時間があれば、exitの終了コードの役割、存在意義について教えてください。

宜しくお願い致します。
最新から表示回答順に表示良回答のみ表示