数组 – 为什么我可以将此处理作为参考打印并将其视为标量?

在以下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是一个包含对数组的引用的数组.
我的问题是为什么以下打印相同的东西(音乐剧)?:

print ${$a2d[0]}[2],"\n";  
print $a2d[0][2],"\n";

我期望第二个打印ARRAY或给出一个错误,因为数组的元素是refences

解决方法

$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中进行了解释,更深入地考虑了这些考虑因素.阅读该文件应该清除许多问题.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...