- ベストアンサー
エラー出力のないPerl CGIサーバーの設定方法
- 学校のサーバーでCGIとしてPerlを実行している際、-wオプションをつけずに実行するとInternal Server Errorが出力され、-wオプションをつけると大量の警告メッセージが出力されて同じくInternal Server Errorになってしまいます。
- STDERRを閉じることで、エラーメッセージのほとんどを抑制することができますが、変数を1回しか使用していないという警告メッセージが残ってしまいます。
- 完全にエラーや警告メッセージをなくすには、Perlのコードを適切に修正する必要があります。エラーの原因を正確に特定し、適切な対策を行うことで、エラーや警告メッセージを抑制することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
---------------- #!/usr/bin/perl -w # index.cgi use include; print $include::x; ---------------- package include; # include.pm $x = 'hoge'; 1; ---------------- 上記の用にパッケージ化すれば出なくなります。 サーバエラーが出るのは改行コードの問題かもしれません。 Solaris なら dos2unix のコマンドがあるのでそれで改行コードを変更してください。 % od -x index.cgi と実行して 0d0a とか 0d が含まれていたら改行コードが dos 形式になってます。
その他の回答 (1)
- alicia-y
- ベストアンサー率40% (85/208)
そのメッセージは $x がどこにも使われてないので出ます。 ので、その変数は削除しましょう。 また、-w で出る警告はすべて取り除きましょう。
補足
補足します。 どうやら別のモジュールで定義した変数を、ロードした側で1回しか使わないと、このメッセージが出るみたいです。 ---------------- #!/usr/bin/perl -w # index.cgi require 'include.pm'; print $x; ---------------- # include.pm $x = 'hoge'; って感じです。 requireしたモジュールの中で使われても、使われた回数にはカウントされないのでしょうか。 -wで出るものはすべて取り除いたのですが、ハッシュのキーが定義されていないものを参照しただけで警告が出るのは、ちょっといただけないです。 それをいちいちコードでチェックしている方が重くなると思うのですが・・・。 -w以外のオプションを追加することはできませんでした。 ちなみにversion 5.005_03 built for sun4-solaris、Apache/1.3.24 Serverです。
お礼
お返事ありがとうございます。 はぁ、もうなんだかわかりません。 すべてのエラーメッセージをなくしても何も表示してくれなくなりました。 おっしゃる通り改行コードはlfだけに変更してみました。 問題なのは、日本語をUTF-8で書いているところなのでしょうか。 もちろん、コメントと文字列内にしかUTF-8は使っていません。 UTF-8はEUCと同じように、ASCII文字以外には0~0x80を使わないそうなので、EUCでできるならUTF-8でできないとは思えないのですが。 perl5.6以降がUTF-8に対応すると書いてありますが、対応するというのは、文字列の長さをUTF-8として測ってくれるとかその辺だそうですから、それ以前が対応していようと対応していまいと関係ないです。 事実ターミナル上ではちゃんと出力されています。 なんでここまできて動かないんでしょう。 もしかしたらIEが壊れたんでしょうか・・・。
補足
# この補足文はこの回答に対するお礼文のあとに書かれました。 NTのユーザープロファイルを作り直したところ、IEの問題だとわかりました。 ついでに-wをつけなければならなかった理由は、最初の #!/usr/local/bin/perl の行がlfでなくcrlfで終わっていたからのようです。 まさかこんなことで・・・。 改行文字を変えるというのがずばり当たっていました。 どうもありがとうございました。