1

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

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

为了:

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

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

4

2 回答 2

10

foreach 变量( array )以正常表示法使用,例如:

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

但是您使用了相反的表示法,即先操作,然后循环。

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

$_ = $_ + 1 foreach @_;

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

$_++ for @_;
于 2011-04-28T11:52:26.710 回答
0

$_将在foreach每次迭代中获得每个不同的值,并且运算符将后增量这些值。@_++

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

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

注:$_++相当于$_ = $_ + 1

$_and@_是 perl 中的特殊变量,它们具有特殊的行为,在这种情况下$_,在 foreach 循环的上下文中,每次迭代都采用当前值

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

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

于 2011-04-28T11:43:59.880 回答