我希望在第二个"如果"的声明可进入的,因为该民主基金价值,但记录显示,它没有被输入。

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警告或严".

想象800行Perl和大量的'ifs的但没有其他发言!没有编码的防御性在所有的!8-O

一个再次感谢您的帮助。

干杯,

有帮助吗?

解决方案

我认为有些事情更为复杂的是要在这里--那些记录的消息似乎是6秒除了,有没有办法,它会采取6秒钟的时间推声明,返回的,如果检查。

任何机会的第一次登录的信息是从以前的呼吁的方法,从其他一些地方的应用程序?

其他提示

降低到最低限度,这个打印的"民主基金检测".

#!/bin/perl -w

use strict;

sub getcmd
{
    return undef;
}

my $ret;

if (!($ret = getcmd()))
{
    print "undef detected\n";
}
else
{
    print "undef undetected\n";
}

因此,你的问题是最有可能的是,美元的自>getcmd()不返回民主基金,即使你觉得这是应该的。

使用 perl调试器 (perl-d)逐步通过代码看看是怎么回事。在调试代码时,重要的是要释放你的头脑从每一假设。

此外,这些行是一个必须上述每perl程序:

use strict;
use warnings;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top