我希望输入第二个"if"语句中的块是因为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()"];
}
Run Code Online (Sandbox Code Playgroud)
日志文件显示:
[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()
Run Code Online (Sandbox Code Playgroud)
任何想法都感激不尽.
编辑:对不起,我已经编辑了代码以显示基本流程.我应该更好地校对它.
感谢您的建议和意见.我没有注意到日志时间戳中的六秒差异,所以现在我怀疑你对执行顺序与我原先预期的不同是正确的.
我会回去看看.猜猜这是你在13个小时后尝试查看其他人的"普通"Perl时得到的结果,试图让"周日必须上线"项目完成任务!
我没有编写代码而只是继承它.该代码是由一些人认为他们"不需要任何警告或严格警告"编写的.
想象一下800行的Perl和许多'ifs',但没有别的陈述!完全没有防御性编码!8-O
再次感谢您的帮助.
干杯,
减少到最低限度,打印"未检测到".
#!/bin/perl -w
use strict;
sub getcmd
{
return undef;
}
my $ret;
if (!($ret = getcmd()))
{
print "undef detected\n";
}
else
{
print "undef undetected\n";
}
Run Code Online (Sandbox Code Playgroud)
因此,你的问题很可能是$ self-> getcmd()没有返回undef,即使你认为它应该.
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |