为什么Perl不允许我从后缀比较中链接后缀循环?

时间:2009-07-07 15:57:07

标签: perl syntax postfix-operator

没关系:

$foo++ if $condition;

这没关系:

$foo++ for (1..10);

但这不是:

$foo++ if $condition for (1..10);

如果事情并不复杂,我发现后者非常易读,而且它适用于一行!有没有办法做到这一点,还是我应该继续我的生活?

3 个答案:

答案 0 :(得分:12)

每个语句只能有一个后缀操作。但是你可以使用do块来做你想要的(sorta),例如

do { $foo++ if $condition } for ( 1..10 );

就个人而言,我发现这种风格极其混乱且难以阅读。如果我是你,我会避免它。如果你遇到了所有麻烦,你可以说

for( 1..10 ) { $foo++ if $condition }

IMHO。

答案 1 :(得分:3)

与if语句实现相同效果的另一种方法是and,所以你可以说

$condition and $foo++ for 1 .. 10;

但是,这不是一种鼓励的做法。

答案 2 :(得分:2)

据我了解,这是在perl的早期阶段做出的故意设计决定,以避免人们难以阅读或难以获得正确的代码。 Perl 6将允许至少一些组合(if / for和for / if,但不是/ for或for if / if may?)我相信Perl 5会在某些时候效仿。

更新:Perl 6将允许循环内的条件(例如EXPR if EXPR for LIST);更需要额外的事情(例如( EXPR for LIST ) if EXPR)。