- ベストアンサー
Use of uninitialized value ---
初心者です。フォームに文字を入力してもらい、↓ print blockquote( textfield( -name => 'die Antwort', 省略----条件にあえば、 my $value = param('die Antwort');#として if (($value eq $ans || $value eq $ans2) and ($c eq $num)){ 「正解」と表示することにしました。すると、うまくいくのですが、 if (($value eq $ans || $value eq $ans2) and ($c eq $num)){ について「Use of uninitialized value ----」とApacheのerror logに書かれてしまいます。このためerror logがすぐに巨大なファイルになってしまいます。これを避ける方法をお教えください。よろしく、お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コードに use warnings が入っているのですよね。 デバッグも済んでいるのでしたら、 no warnings qw ( uninitialized ); で、この警告の表示を抑制してもよいと思います。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
今回一番の問題は $value という変数ですよね? 参照前にいちいち defined で変数をチェックして回るのも面倒ですから、 サブルーチン param が undef の代わりに空文字列を返すようにするように変更するとか、 サブルーチンを変更できないのであれば、呼び出しの箇所で undef が返されたかどうかを確認し、 undef だったら適当に内容を書き換えるというやり方はどうでしょうか? こんな感じ。 #!/usr/bin/perl use strict; use warnings; use feature ':5.10'; sub foo { undef; } my $var = foo; #my $var = foo || 'dummy'; say $var; これを実行すると Use of uninitialized value $var in say at okw.pl line 15. のような警告が出されますが、下のコメントアウトされている行と入れ替えると dummy のようになります。
お礼
ありがとうございました。わたしには、むずかしいです。挑戦してみます。
- _--_1l1_1_
- ベストアンサー率67% (102/152)
回答になっているかわかりませんが、貼っときます。ペタ --- # 方法1 予め不正解となる値で初期化しておいて "処理" で更新する my $value = ''; # 処理 if ( ( $value eq $ans1 || $value eq $ans2 ) and ( $c eq $num ) ) { print '正解', "\n"; } else { print '不正解', "\n"; } # 方法2 definedで初期化されたか確認する my $value; # 処理 if ( ( defined $value ) and ( $value eq $ans1 || $value eq $ans2 ) and ( $c eq $num ) ) { print '正解', "\n"; } else { print '不正解', "\n"; }
お礼
ありがとうございました。じっくり考えてみます。
お礼
ありがとうございました。やってみます。