アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者です。フォームに文字を入力してもらい、↓
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がすぐに巨大なファイルになってしまいます。これを避ける方法をお教えください。よろしく、お願いいたします。

A 回答 (3件)

コードに use warnings が入っているのですよね。


デバッグも済んでいるのでしたら、
no warnings qw ( uninitialized );
で、この警告の表示を抑制してもよいと思います。
    • good
    • 2
この回答へのお礼

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

お礼日時:2009/06/22 10:27

今回一番の問題は $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

のようになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/22 10:29

回答になっているかわかりませんが、貼っときます。

ペタ
---
# 方法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";
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/22 10:26

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