質問
私はこのブロックの場合声明で入力がundef値のログといわれていて、現在停止しているを入力します。
sub getcmd{
my $self = $_[0];
if ( $self->_recv == OK ){
push @{$self->{'log'}}, ['NOTICE', "OK"];
return "My command";
}
push @{$self->{'log'}}, ['ERROR', "Did not get OK back"];
return undef;
}
...
if (!($ret = $self->getcmd)){
push @{$self->{'log'}}, ['ERROR', "failed to read after asking for NEXT"];
}
else {
push @{$self->{'log'}}, ['ERROR', "'undef' not detected in next()"];
}
ログファイルが表示されます.
[Fri May 8 19:25:56 2009]: ERROR: Did not get OK back
[Fri May 8 19:26:02 2009]: ERROR: 'undef' not detected in next()
そのアイデアなどの言語を受理します。
編集: 申し訳、編集、コードの基本的な流れがあります。うっかり校正したのでしょう。
- を加えた$retにgetcmd(ミ起こっていることをロギング機能するだけでプリントアウトしたりすることの現在の値$retであるグローバル変数は常にシャレな戻り値です。
- 思グのログメッセージに追加"戻る"
の提案び、現在注目を集めています。いがあるようには見えなかったと、第二のログのタイムスタンプは今までの思い出についての実行順序が異なるものと期待される。
私は戻ってみました。うことになるかを見ようとしたとき、誰かの"平均"Perl後の十三時間というものが上がったり下がったりして、"なければな暮ら月曜日に"プロジェクト!
なかった、コードを書く、単に継承されます。をコードしたとの新聞記事をきっかけにカップルのような要なsteenking警告またはstricts".
想像800ラインのPerlの'if'も他の諸表!な守備の符号です。8-O
ものをもう一度おります。
声で
解決
私はより複雑な何かがここで起こっていると思います - これらのログメッセージは、離れて6秒であるように見える、それがプッシュ文で、リターン、およびかどうかを確認するために6秒かかるだろう方法はありません。
万が一最初のログメッセージは、アプリケーション内の他の場所からのメソッドの前の呼び出しからでしたか?
他のヒント
最小限に低減、このプリント「が検出undefを」
#!/bin/perl -w
use strict;
sub getcmd
{
return undef;
}
my $ret;
if (!($ret = getcmd()))
{
print "undef detected\n";
}
else
{
print "undef undetected\n";
}
その結果、あなたの問題が最も可能性が高いこと$自己> getcmd()あなたはそれが必要だと思うにもかかわらず、undefを返していません。
であるかを確認するコードをステップするのPerlデバッガの(Perlの-d)を使用し上に行きます。コードをデバッグするとき、それはすべての仮定からあなたの心を解放することが重要です。
また、これらの行は、すべてのperlのプログラム上で必須です
use strict;
use warnings;