为什么这个Perl片段没有检测到'undef'?

Rob*_*lls 2 perl undef

我希望输入第二个"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)

任何想法都感激不尽.

编辑:对不起,我已经编辑了代码以显示基本流程.我应该更好地校对它.

  • 我在getcmd()中添加了$ ret来模拟日志函数中发生的事情,它只打印出$ ret的当前值,这是一个总是用来捕获返回值的全局变量.
  • 我已经删除了日志消息并错过了额外的"后退"

感谢您的建议和意见.我没有注意到日志时间戳中的六秒差异,所以现在我怀疑你对执行顺序与我原先预期的不同是正确的.

我会回去看看.猜猜这是你在13个小时后尝试查看其他人的"普通"Perl时得到的结果,试图让"周日必须上线"项目完成任务!

我没有编写代码而只是继承它.该代码是由一些人认为他们"不需要任何警告或严格警告"编写的.

想象一下800行的Perl和许多'ifs',但没有别的陈述!完全没有防御性编码!8-O

再次感谢您的帮助.

干杯,

Jon*_*ler 7

减少到最低限度,打印"未检测到".

#!/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,即使你认为它应该.