如何对这个Perl数组数组进行处理?

Mik*_*ike 4 arrays perl reference

考虑一下这个Perl代码

my @a=[[1]];

print $a[0][0];


**output**
ARRAY(0x229e8)
Run Code Online (Sandbox Code Playgroud)

为什么打印ARRAY而不是1?我本来希望@a创建一个大小为1的数组,引用第二个只包含一个元素的数组1.

mob*_*mob 14

这个东西很棘手.您已将其指定@a为包含对包含对数组的引用的数组的引用的列表,这是一个比您预期的更多的间接层.

为了得到你期望的结果,你应该说

@a = ( [ 1 ] );
Run Code Online (Sandbox Code Playgroud)


Axe*_*man 11

你想要的价值是$a[0][0][0].您将数组引用指定为数组的第一个元素@a.

这是类似的事情:

my @a = 'scalar';
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含1个插槽的数组,其中字符串'scalar'作为唯一元素.因此,当您为数组指定标量时,Perl会尝试执行您想要的操作并创建大小为1的列表,标量值为第一个元素.

也,

my @a = undef;
Run Code Online (Sandbox Code Playgroud)

做同样的事情,但第一个插槽是undef.你想要的是什么

my @a = [1];
Run Code Online (Sandbox Code Playgroud)