perl的新手,尝试稍微使用它的语法,然后我收到了此错误消息
$ perl testP
syntax error at testP line 3, near "$_ ("
Execution of testP aborted due to compilation errors.
有:
$_=$_+1 foreach $_ (@_);
谁能告诉我出了什么问题以及如何解决?感谢。
答案 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)