Perl:在这种特殊情况下,哈希不允许使用字母数字键

gio*_*ano 4 perl hash quoting

我通过创建哈希发现了一个奇怪的行为:

perl -e "%x = (1 => 10, p2 => 20); while ( ($k,$v) = each %x ) { print \"key $k value $v\n\";}"
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

key p2 value 20
key 1 value 10
Run Code Online (Sandbox Code Playgroud)

但是,如果我将密钥 p2 更改为 1p2,则会出现错误:

perl -e "%x = (1 => 10, 1p2 => 20); while ( ($k,$v) = each %x ) { print \"key $k value $v\n\";}"
Run Code Online (Sandbox Code Playgroud)

输出是:

syntax error at -e line 1, near "1p2"
Execution of -e aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

为什么会报错?

(Win10,草莓Perl v5.30.0)

Sha*_*awn 10

引用自perlop(强调):

“=>”运算符(有时发音为“fatcomma”)是逗号的同义词,除了它会导致其左侧的单词以字母或下划线开头并且仅由字母组成时被解释为字符串,数字和下划线。这包括可能被解释为运算符、常量、单个数字 v 字符串或函数调用的操作数。如果对此行为有疑问,可以明确引用左操作数。

由于1p2以数字开头,因此=>不适用的特殊行为。您必须像普通字符串一样引用它以防止解析错误。