2

还行吧:

$foo++ if $condition;

这没关系:

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

但这不是:

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

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

4

3 回答 3

12

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

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

就个人而言,我发现这种风格非常混乱且难以阅读。如果我是你,我会避免它。如果你要解决所有这些麻烦,你不妨说

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

恕我直言。

于 2009-07-07T16:00:30.753 回答
3

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

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

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

于 2009-07-07T16:27:04.553 回答
2

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

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

于 2009-07-08T17:37:10.247 回答