2012-09-26 71 views
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 

但沒有警告消息這一次。

它試圖打印什麼?這種行爲背後的原因是什麼。

回答

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」。

4

@array[]是數組切片符號。例如:

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

@array[1,2]將返回的(香蕉,黃瓜)(索引1和@array的索引2)的列表。

現在,@array[@array]嘗試採用inner @array的值並將它們用作外部@array的索引。在你的例子中,@array [@array]相當於@array [0..10,12]。由於內部數組的其中一個值爲12,而外部數組的索引不是12,因此會得到未定義的值警告。

+0

'@ array'在索引外數組的方括號內的列表上下文中進行評估,因此該值是'@ array'中存儲的所有值的列表,這些值又被用作索引。所以這是不正確的,內部數組的值是12. – DavidO

+0

@DavidO我說「a」的價值,因爲在其中一個,而不是「the」的價值。我會將其改爲「其中一個價值」。 –

+1

我認爲這是一個很好的編輯。 :) – DavidO