如果我在=>
这样的数组结构中使用my $arr = [ a => b ];
,它是否与my $arr = [a, b];
相同? (实际上我在这里有一个不相关的问题,为什么用这种方式初始化数组不需要arr
前缀@
?)
来源:http://www.misc-perl-info.com/perl-operators.html
如果这是真的,那么perl是否有充分理由拥有这个看似模糊的功能呢?
答案 0 :(得分:7)
=>
运算符是逗号的同义词,不同之处在于,如果它以字母或下划线开头并且仅由字母,数字和下划线组成,则会使其左侧的单词被解释为字符串。
<强>为什么吗
=>
运算符有助于记录哈希中键和值之间的对应关系,以及列表中的其他配对元素。 (source)
答案 1 :(得分:6)
a => b
与'a', b
相同。除了自动引用属性之外,隐含关系也很有用。比较:
Point->new('x', $x, 'y', $y)
Point->new(x => $x, y => $y)
[ ... ]
创建一个(匿名)数组并返回对它的引用。
[ ... ]
类似于
do { my @a = ( ... ); \@a }
这就是将结果分配给标量的原因。如果您想创建数组,则使用my @a
,而不是[ ]
。