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

tex*_*uce 3 perl

my $arr = [[2,4],[1,3]];
print $$arr[0]->[1];
Run Code Online (Sandbox Code Playgroud)

它按预期打印1.

如果我删除取消引用:

my $arr = [[2,4],[1,3]];
print $$arr[0][1];
Run Code Online (Sandbox Code Playgroud)

它仍然有效,没有任何警告?为什么?

Mil*_*ler 8

任何{}和之间总是假设取消引用[].以下是相同的:

print $var[2]{key}[3][5];
Run Code Online (Sandbox Code Playgroud)

print $var[2]->{key}->[3]->[5];
Run Code Online (Sandbox Code Playgroud)

来自文档

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节:

括号下标之间的箭头是可选的