Perl的'foreach`语句中括号的用途是什么?

Dav*_*d B 5 syntax perl foreach

我总是想知道为什么我必须写

foreach my $x (@arr)
Run Code Online (Sandbox Code Playgroud)

代替

foreach my $x @arr
Run Code Online (Sandbox Code Playgroud)

括号的目的是什么?

Cha*_*ens 8

我只能想到一个具体的原因.以下代码有效:

for ($foo) {
    $_++
}
Run Code Online (Sandbox Code Playgroud)

如果你要改变它

for $foo {
    $_++
}
Run Code Online (Sandbox Code Playgroud)

那你真的会说

for $foo{$_++}
Run Code Online (Sandbox Code Playgroud)

(即哈希查找).Perl 6通过改变空格与变量一起工作的方式解决了这个问题(你不能说它%foo <bar>和它的意思相同%foo<bar>).

  • @ vol7ron这个问题不是关于数组的问题,而是关于**的问题,以及为什么它的语法在Perl 5中运行的原因.但是既然你想成为猪头,那么@ for @foo {$ _ + +}`有同样的问题,除了它现在认为`@foo {$ _ ++}`是`%foo`上的哈希切片.你快乐吗? (3认同)

Dav*_*man 2

轻率的回答:因为这就是 Larry喜欢的方式,在创建 Perl 5 时也喜欢它。

更严肃的答案:它有助于消除“迭代@arr,将每个值放入$x” ( for $x (@arr)) 和“迭代$x@arr,将每个值放入$_” ( for ($x, @arr)) 之间的歧义。而且,是的,我意识到后一个版本中的额外逗号即使没有括号也确实可以消除歧义,但对于人类读者来说不太明显,我预计仅依赖它会导致更多错误。