3

当我试图打印数组中的特定元素时,我错误地在 [] 中输入了相同数组的名称作为元素并得到了一些输出,如图所示。我认为它正在获取数组的大小并打印该数量的字符,输出证明这是错误的。

@array = (0..10, 12);

print "@array[@array]";

印刷

 Use of uninitialized value in join or string at
 /home/VAR121/Program/Practise_Perl/Arrays.pl line 9.
 0 1 2 3 4 5 6 7 8 9 10

我提前了一步,编辑了如下所示的代码

print "@array[@array[@array]]";

output as: `0 1 2 3 4 5 6 7 8 9 10 0`  Use of uninitialized value in join or string at
 /home/VAR121/Program/Practise_Perl/Arrays.pl line 9.

现在我尝试在第二个数组中放入一个数字,而不是再次给出如下数组名称。

print "@array[@array[1,2,3]]";

输出为

 1 2 3

但这次没有警告信息。

它试图打印什么?以及这种行为背后的原因是什么。

4

2 回答 2

9

您正在创建一个数组切片。首先了解您的数组包含元素 0、1、2、3、4、5、6、7、8、9、10、12。

总共有 12 个元素(没有值 11,但在索引 11 处存储的是值 12)。

现在,当您使用此构造时:@array[@array]您正在获取一个切片,并请求存储在索引 0、1、2、3、4、5、6、7、8、9、10 和 12 中的值。没有元素数组中的索引为 12。第十一元素具有值“12”。

于 2012-09-26T05:43:11.757 回答
4

@array[]是数组切片表示法。例如:

my @array = (qw/apple banana cucumber date/)

@array[1,2]将返回 (banana, cucumber) 列表(@array 的索引 1 和索引 2)。

现在,@array[@array]尝试获取内部@array 的值并将它们用作外部@array 的索引。在您的示例中,@array[@array] 等效于 @array[0..10, 12]。由于内部数组的值之一是 12,而外部数组没有索引 12,因此您会收到未定义值警告。

于 2012-09-26T05:44:00.193 回答