[Perl] 程式設計教學:陣列(Array) 和串列(List) | 開源技術教學網
文章推薦指數: 80 %
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
延伸文章資訊
- 1Perl 學習手札- 3. 串列與陣列 - Easun.org
在Perl中,陣列變數是以@符號開頭,例如你可以定義一個變數名稱叫做@array。 ... 這也就是為甚麼我們可以利用push/pop來對陣列新增,或是取出元素的最重要原因。
- 2push - Perldoc Browser
Returns the number of elements in the array following the completed push . Starting with Perl 5.1...
- 3Perl | push() Function - GeeksforGeeks
push() function in Perl is used to push a list of values onto the end of the array. push() functi...
- 4perl push的用法及子程式傳回值的反思
pop 操作將數組的最後一個元素取出並返回:. @array=5..9; $fred=pop(@array); #$fred 得到9,@array 現在為(5,6,7,8)
- 5[Perl] 程式設計教學:陣列(Array) 和串列(List) | 開源技術教學網
Perl 的陣列(array) 是一種線性的容器,以數字做為索引,可儲存異質資料。 ... "bar"); push @arr, "baz", "qux", "quux"; scalar(@ar...