使用语句中Perl哈希语法的描述

时间:2014-04-05 15:00:42

标签: perl

在Perl中允许以下内容

use constant MY_CONSTANT => 1

然而,这与"使用"的文档不符。这说明它可以列出一个清单。但是,上面不是正常方式的列表,如下面的命令所示。

perl -e 'use strict; my @l = "test" => 1; print "@l\n"

这将打印" test"而不是"测试1"。

这是一些特殊列表语法,可以与use语句一起使用,还是在其他情况下也允许使用?

1 个答案:

答案 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);

将产生您的预期输出。