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

时间:2010-06-21 13:00:05

标签: 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];

我收到语法错误。有人能解释一下原因吗?

2 个答案:

答案 0 :(得分:8)

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

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

语法错误来自于Perl不知道如何取消引用数组的事实。

答案 1 :(得分:3)

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

这将创建一个包含4个元素的数组。

(@a[0..3])

这将返回一个列表,其中包含与@a相同的四个元素。

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

这将从括号内的4元素列表中选择最后两个元素。

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

这会打印5,7@a中的最后两个元素。

为了好玩,请尝试以下方法:

@a=(6,3,5,7);
@b=(@a[0..3]);
print( "\@b=" . join(",",@b) . "\n" );
@c=@b[2..3];
print( "\@c=" . join(",",@c) . "\n" );

请注意,我使用Perl调试器来了解您的程序。如果你不确定Perl实际上是从线到线做什么的话,你也可以这样做。