在以下perl片段中:
my $a1 = [ qw(rock pop musical) ];
my $b1 = [ qw( mystery action drama )];
my $c1 = [ qw( biography novel periodical)];
my @a2d = (
$a1,
$b1,
$c1
);
@a2d
是一个数组,其中包含对数组的引用。我的问题是为什么以下内容打印相同的内容(
musical
)?:print ${$a2d[0]}[2],"\n";
print $a2d[0][2],"\n";
我期望第二个打印ARRAY或给出错误,因为数组的元素是引用
最佳答案
$a2d[0]
是数组引用。我们可以获取此数组引用并打印出第三个条目:
my $ref = $a2d[0];
say ${ $ref }[2];
say $ref->[2];
这些形式是等效的。现在,我们可以取消该中间变量,并获得:
say ${ $a2d[0] }[2];
say $a2d[0]->[2];
如果取消引用运算符
->
出现在两个下标之间,则可以将其省略为快捷方式:say $a2d[0][2];
当左下标为
[...]
或{...}
,右下标为[...]
,{...}
或(...)
时,可以省略箭头。perlreftut中对此也进行了解释,其中更深入地介绍了这些注意事项。阅读该文档应清除许多问题。