在Perl中允许以下内容
use constant MY_CONSTANT => 1
然而,这与"使用"的文档不符。这说明它可以列出一个清单。但是,上面不是正常方式的列表,如下面的命令所示。
perl -e 'use strict; my @l = "test" => 1; print "@l\n"
这将打印" test"而不是"测试1"。
这是一些特殊列表语法,可以与use语句一起使用,还是在其他情况下也允许使用?
答案 0 :(得分:10)
MY_CONSTANT => 1
不是“哈希”。
=>
基本上只是一个逗号,附加属性是左侧的“裸字”将自动引用:foo => 42
与'foo', 42
完全相同。因此,我们可以做愚蠢的事情,如foo => bar => baz => 42
。 “胖逗号”应该用于表示左右值之间的关系,例如在散列键和值之间。
LIST
中的 use Module LIST
并不意味着您需要使用列表运算符
LIST
只是引用将在列表上下文中计算的任意表达式,因此列表运算符MY_CONSTANT => 1
不仅与指定的语法匹配,而且如下所示:
sub f { MY_CONSTANT => 1 }
use constant f();
警惕优先级
您遇到的下一个问题是=
运算符的优先级高于,
:
my @array = 1, 2, 3;
解析为
(my @array = 1), 2, 3;
由于=>
与,
相同,行my @array = test => 1;
将解析为
(my @array = "test"), 1;
使用parens表示正确的优先顺序:
my @array = (test => 1);
将产生您的预期输出。