为什么这里不需要解除引用?

时间:2014-04-16 20:16:44

标签: perl

my $arr = [[2,4],[1,3]];
print $$arr[0]->[1];

按预期打印1。

如果我删除了取消引用:

my $arr = [[2,4],[1,3]];
print $$arr[0][1];

它仍然有效,根本没有警告?为什么呢?

1 个答案:

答案 0 :(得分:8)

在任何{}[]之间始终假设取消引用。以下是相同的:

print $var[2]{key}[3][5];

print $var[2]->{key}->[3]->[5];

来自文档

perlreftut #Arrow Rule

  

在两个下标之间,箭头是可选的。

     

我们可以写$a[1]->[2]而不是$a[1][2];它意味着同样的事情。我们可以写$a[0]->[1] = 23而不是$a[0][1] = 23;它意味着同样的事情。

     

现在看起来真的像二维数组!

     

你可以看到为什么箭头很重要。没有它们,我们将不得不写${$a[1]}[2]而不是$a[1][2]。对于三维数组,他们让我们写$x[2][3][5]而不是不可读的${${$x[2]}[3]}[5]

perlref #Using References,第3部分:

  

箭头是括号下标

之间的可选