$df{key} =10 ; return ; if $result == 10 ;
给了我一个错误。我怎样才能做到这一点?
答案 0 :(得分:9)
if
的后置陈述形式仅适用于单个陈述。在 if
条件之后,您必须在块中包含多个语句,这些条件本身需要括在括号中:
if ( $result == 10 ) {
$df{key} = 10;
return;
}
在这种情况下,可以将两个语句与post语句条件组合。这里的想法是通过执行布尔评估将两个语句组合在一起。
然而,这通常是不一个好主意,因为它可能会短路并且无法达到预期效果,例如$df{key} = 0
:
$df{key} = 10 and return if $result == 10;
来自perlsyn:
在Perl中,定义范围的语句序列称为块
...通常,块用大括号分隔,也称为大括号。我们将这个语法结构称为BLOCK。
以下复合语句可用于控制流程:
if (EXPR) BLOCK
if (EXPR) BLOCK else BLOCK
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
答案 1 :(得分:4)
您可以将语句分组为do BLOCK
并使用条件
该复合语句的语句修饰符。
do { $df{key} = 10; return } if $result == 10;
与Zaid发布的and
构造不同,这并不含糊。您
但是,在使用条件语句之前应该三思而后行
修改。特别是混合if
/ unless
语句
if
/ unless
语句修饰符会降低代码的可读性。
在我看来,声明修饰符有意义的主要情况 是简单的错误路径,即:
croak "foo not specified" unless exists $args{foo};
答案 2 :(得分:4)
comma operator允许将多个语句链接到一个表达式中,之后您可以包含条件:
$df{key} = 10, return if $result == 10;
在检查错误情况时,我经常使用此构造:
for my $foo (something...)
{
warn("invalid thing"), next unless $foo =~ /pattern/;
# ...
}