在perl(v5.14.2)中,为什么map {+0,0}()正确但映射{0,0}()不正确?

exp*_*sic 8 perl

似乎perl将{+0,0}视为BLOCK而{0,0}视为EXPR但是为什么?这是一项特殊规定吗?

如果我想确保{}是一个匿名哈希,无论大括号包含什么,我是否必须在{}之前加上一个'+'?

谢谢.

yst*_*sth 3

为什么?因为它可能是其中之一,并且解析器没有向前看足够远,无法在需要做出决定时确定。

无论 {} 的内容如何,​​是否都必须在 {} 之前添加“+”才能将其视为匿名哈希构造函数?是的。

  • 有趣的是, `perl -MO=Deparse -e "map { +0,0 } 1..2"` 输出的内容在原始脚本中无法使用。 (3认同)