Perl:为什么这会产生早期回报

时间:2013-09-12 09:28:11

标签: perl

我发现了一些令人困惑的事情

我曾经有一个方法,其中包含各种指令,最终结果如下:

    $self->save;
    $object1->save;
    for my $action (@{$self->actions}) {
         $action->save;
     }
    return $self;

我把它改为:

return if !$self->save;
return if defined $object1 && !$object1->save;
for my $action (@{$self->actions}) {
    return if !$action->save;
}
return $self;

第一个版本一直运行到最后一行。在第二个版本中,我从未到达最后一行。我没有修改整个系统中的任何其他内容。我做错了什么?

UPDATE1:

注意

    return if !$self->save;            
    return if defined $object1 && !$object1->save;

    for my $action (@{$self->actions}) {
           $action->save;
    }          
    return $self;

也很早就结束了。

UPDATE2:

$ object1

   my $object1 = $self->get_chosen;

执行以下操作:

 sub get_chosen {
     my ($self) = @_;
     my $chosen_id = $self->_get_chosen_id;
     return undef if !defined $chosen_id;
     my ($chosen)
        = grep { $_->id eq $chosen_id } @{ $self->members };
     return $chosen;
 }

2 个答案:

答案 0 :(得分:2)

当您致电$action->save时,其中一个实例正在返回错误值。

答案 1 :(得分:0)

记录。 我仍然不知道为什么代码部分2早期返回但是如果我改变

  return if defined $object1 && !$object1->save;

  return if ($object1 && !$object1->save);

早期的返回错误消失了。