试图用perl在一行中编写foreach并失败

时间:2011-04-28 11:35:35

标签: perl syntax for-loop foreach simplify

perl的新手,尝试稍微使用它的语法,然后我收到了此错误消息

$ perl testP
syntax error at testP line 3, near "$_ ("
Execution of testP aborted due to compilation errors.

有:

$_=$_+1 foreach $_ (@_);

谁能告诉我出了什么问题以及如何解决?感谢。

2 个答案:

答案 0 :(得分:10)

foreach变量(数组)用于正常表示法,如:

foreach $_ ( @_ ) {
    $_ = $_ + 1;
}

但你使用反向表示法,即先操作,然后循环。

在这种情况下,你不能为循环提供变量名(无论如何都是无用的,因为你使用的是默认变量$ _),循环应该是:

$_ = $_ + 1 foreach @_;

另请注意,您可以使用for代替foreach,如果您只想增加变量,可以使用++运算符,从而使其成为:

$_++ for @_;

答案 1 :(得分:0)

$_会在 foreach 每次迭代上获得 @_的每个值<{1}},以及{ {1}}运算符将后递增值。

所以这样的事情会起作用:

++

注意:foreach (@_) {$_++;} 相当于$_++

$_ = $_ + 1$_是perl中的特殊变量,它们有一个特殊的行为,在这种情况下,在foreach循环的上下文中@_当前值在每次迭代中。

特殊变量是perl的复杂而强大的部分之一。您可以获得有关它们如何在special vars documentation上工作的更多信息。

另一件事是不应使用特殊变量作为$_的目标,因为它们很可能无法按预期工作(另请参阅foreach documentation