• ベストアンサー

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がすぐに巨大なファイルになってしまいます。これを避ける方法をお教えください。よろしく、お願いいたします。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

コードに use warnings が入っているのですよね。 デバッグも済んでいるのでしたら、 no warnings qw ( uninitialized ); で、この警告の表示を抑制してもよいと思います。

ttaa100kkaa
質問者

お礼

ありがとうございました。やってみます。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

今回一番の問題は $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 のようになります。

ttaa100kkaa
質問者

お礼

ありがとうございました。わたしには、むずかしいです。挑戦してみます。

回答No.1

回答になっているかわかりませんが、貼っときます。ペタ --- # 方法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"; }

ttaa100kkaa
質問者

お礼

ありがとうございました。じっくり考えてみます。

関連するQ&A