为什么赢了';t Perl让我从后缀比较链接一个后缀循环?

为什么赢了';t Perl让我从后缀比较链接一个后缀循环?,perl,syntax,postfix-operator,Perl,Syntax,Postfix Operator,这没关系: $foo++ if $condition; $foo++ for (1..10); 这没关系: $foo++ if $condition; $foo++ for (1..10); 但这不是: $foo++ if $condition for (1..10); 如果事情不复杂的话,我觉得后者很可读,而且只适合一行!有办法做到这一点吗?或者我应该继续我的生活吗?每个语句只能有一个后缀操作。但是您可以通过使用do块来做您想做的事情(sorta),例如 do { $foo++ if

这没关系:

$foo++ if $condition;
$foo++ for (1..10);
这没关系:

$foo++ if $condition;
$foo++ for (1..10);
但这不是:

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

如果事情不复杂的话,我觉得后者很可读,而且只适合一行!有办法做到这一点吗?或者我应该继续我的生活吗?

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

do { $foo++ if $condition } for ( 1..10 );
就我个人而言,我觉得这种风格非常令人困惑,难以阅读。如果我是你,我会避免的。如果你要找那么多麻烦,你不妨说

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

IMHO.

实现与if语句相同效果的另一种方法是使用
,因此您可以说

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

然而,这并不是一种受鼓励的做法。

据我所知,这是在perl早期的一个有意的设计决策,以避免人们编写难以阅读或难以获得正确代码的代码。Perl6将允许至少一些组合(if/for和for/if,但不是for/for或if/if-maybe?),我相信Perl5在某个时候也会这样做


更新:Perl 6将允许在循环中使用条件(例如,如果EXPR for LIST),则使用EXPR;任何更多的都需要额外的参数(例如,如果EXPR,则EXPR代表列表)。

这对我来说都是一样的。我只是找不到任何地方有详细的说明,我正在寻找一个解释。谢谢你能在标题中大写Perl吗?=)有时我认为拉里·沃尔(Larry Wall)和他的同事们脑子里想的最后一件事是防止不可读的代码:D这是Perl的乐趣之一,不过,自由地做最适合这种情况的事情。我完全希望有更多的自由,即使这给了我一个让自己堕落的机会。