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尝试查找第一个索引指向的数组,它查找的是数组而不是指针/引用,但失败了。