Perl中的双索引,为什么会这样?

Perl中的双索引,为什么会这样?,perl,arrays,multidimensional-array,Perl,Arrays,Multidimensional Array,与 要不是 @a=(6,3,5,7); @b=(@a[0..3])[2..3]; print @b; #print 57 我得到一个语法错误。有人能解释一下原因吗 @b=@a[0..3][2..3]; 这将创建一个包含4个元素的数组 @a=(6,3,5,7); 这将返回一个包含与@a相同的四个元素的列表 (@a[0..3]) 这将从括号内的4元素列表中选择最后两个元素 (@a[0..3])[2..3]; 这将打印5,7,即@a中的最后两个元素 (@a[0..3]) 为了好玩,请

要不是

@a=(6,3,5,7);

@b=(@a[0..3])[2..3];

print @b;

#print 57
我得到一个语法错误。有人能解释一下原因吗

@b=@a[0..3][2..3];
这将创建一个包含4个元素的数组

@a=(6,3,5,7);
这将返回一个包含与
@a
相同的四个元素的列表

(@a[0..3])
这将从括号内的4元素列表中选择最后两个元素

(@a[0..3])[2..3];
这将打印
5,7
,即
@a
中的最后两个元素

(@a[0..3])
为了好玩,请尝试以下方法:

print( join( ",", @b ) );

注意,我使用Perl调试器来理解您的程序。如果您不确定Perl从一行到另一行实际上在做什么,您也可以这样做。

for的$a[1][2]用于二维表,实际上它是$a[1]->[2]的缩写

因此,第一个索引需要返回一个引用,而不是数组的切片


语法错误源于Perl不知道如何取消对数组的引用。

我猜这意味着数组的切片不是列表。如果它是第二个示例,那么它将编译。不,这意味着一个切片不是指向另一个数组的指针。在第一个示例中,首先用括号计算一个切片,得到一个列表,然后取其中的一个切片。在第二个示例中,perl尝试查找第一个索引指向的数组,它查找的是数组而不是指针/引用,但失败了。