学校のサーバーでCGIとしてPerlをやっているのですが、-wを与えないとInternal Server Errorを出してくれる、変なサーバーなのです。
かといって-wをつけると、ちょっとした警告が続出して、エラー出力があると判断されてやっぱりInternal Server Errorになるのです。

強行手段としてclose(STDERR)すると、ほとんど消えたのですが、

Name "main::x" used only once: possible typo at index.cgi line 73.

のように、変数を1回しか使ってないという警告が残ってしまいます。

完全にエラーや警告メッセージをなくすにはどうしたらよいでしょう。

A 回答 (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 形式になってます。

この回答への補足

# この補足文はこの回答に対するお礼文のあとに書かれました。

NTのユーザープロファイルを作り直したところ、IEの問題だとわかりました。

ついでに-wをつけなければならなかった理由は、最初の

#!/usr/local/bin/perl

の行がlfでなくcrlfで終わっていたからのようです。
まさかこんなことで・・・。
改行文字を変えるというのがずばり当たっていました。

どうもありがとうございました。

補足日時:2002/04/15 12:03
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

はぁ、もうなんだかわかりません。
すべてのエラーメッセージをなくしても何も表示してくれなくなりました。

おっしゃる通り改行コードはlfだけに変更してみました。
問題なのは、日本語をUTF-8で書いているところなのでしょうか。
もちろん、コメントと文字列内にしかUTF-8は使っていません。
UTF-8はEUCと同じように、ASCII文字以外には0~0x80を使わないそうなので、EUCでできるならUTF-8でできないとは思えないのですが。
perl5.6以降がUTF-8に対応すると書いてありますが、対応するというのは、文字列の長さをUTF-8として測ってくれるとかその辺だそうですから、それ以前が対応していようと対応していまいと関係ないです。
事実ターミナル上ではちゃんと出力されています。

なんでここまできて動かないんでしょう。
もしかしたらIEが壊れたんでしょうか・・・。

お礼日時:2002/04/15 10:12

そのメッセージは $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です。

補足日時:2002/04/13 09:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報