[Perl] 程式設計教學:陣列(Array) 和串列(List) | 開源技術教學網

文章推薦指數: 80 %
投票人數:10人

Perl 的陣列(array) 是一種線性的容器,以數字做為索引,可儲存異質資料。

... "bar"); push @arr, "baz", "qux", "quux"; scalar(@arr) == 5 or die ... 由MichelleChen撰寫。

最後修改於西元2021年02月02日 開源教學Perl程式設計陣列(Array)和串列(List) 前言 Perl的陣列(array)是一種線性的容器,以數字做為索引,可儲存異質資料。

串列則是一序列的資料。

這兩者有一些關連,本文介紹Perl陣列和串列。

陣列(Array)和串列(List)的差異 在Perl裡面,陣列和串列不完全相同,如push函式的宣告: pushARRAY,LIST push會把串列加入陣列尾端,由此可知,Perl對陣列和串列的看法有差異。

我們看一下以下的程式碼片段: my@arr=("foo","bar","baz"); 在這個程式碼中,@arr是陣列,而("foo","bar","baz")是串列。

由此可知,陣列是儲存串列的變數,串列是一個序列的資料。

建立陣列 以下程式碼片段用空串列建立空陣列: my$arr=(); 以下程式碼片段用現有的串列建立陣列: my@arr=("foo","bar","baz"); 以下程式碼片段用現有的陣列建立新陣列: my@a=(1,2,3); my@b=(10,@a,11); 這時候@a會自動攤平(flatten),@b會是(10,1,2,3,11)。

以索引(index)存取陣列 存取陣列元素時,以數字為索引(index),從零開始計數(zero-based)。

如下例: my@arr=("foo","bar","baz"); $arr[0]=="foo"ordie"Wrongvalue"; $arr[1]=="bar"ordie"Wrongvalue"; $arr[2]=="baz"ordie"Wrongvalue"; 要注意,我們一開始宣告@arr時,其sigil是@,但我們以$arr[0]取索引時,其sigil是$。

Perl針對不同類型的變數會使用不同的sigil,一開始容易寫錯,需注意。

取得陣列長度 使用scalar函式可取得陣列長度,如下例: my@a=(1,2,3); my@b=(10,@a,11); scalar(@a)==3ordie"Wronglength"; scalar(@b)==5ordie"Wronglength"; Perl另外有一個length函式,該函式用來取得字串長度,而非陣列長度。

scalar其實牽涉到語境(context)的概念,我們留在後文介紹。

取得陣列尾端的索引 使用$#搭配陣列變數可取得尾端的索引值。

參考下例: my@arr=(1,2,3,4,5); $#arr==4ordie"Wrongindex"; 修改$#sigil所指向的變數會改變陣列的長度,故不建議這麼做。

走訪陣列 使用for迴圈搭配計數器可走訪陣列: my@arr=("foo","bar","baz","qux"); for(my$i=0;$i



請為這篇文章評分?