自動目錄
PERL的陣列非常的靈活且強大
陣列的基本性質
陣列使用符號 '@'作為開頭,並接上名稱 @arr_name
定義一個空陣列
@arr_name=();
陣列的內容可以直接將清單指定到陣列即可,例如設定一個字串陣列:
@week=('Mon','Tue','Wed','Thu','Fri','Sat','Sun');
字串陣列中每個項目都得用一堆引號包起來不免麻煩,PERL有方法讓你偷懶,就是使用qw這個函數:
@week=qw(Mon Tue Wed Thu Fri Sat Sun);
定義一個數值陣列
@cost = (20,30,40,45,56,15);
要取得陣列的項目的方法:
print $cost[0]; # 第1項 20 print $cost[1]; # 第2項 30 print $cost[-1]; # 最末項 15 print $cost[-3]; # 倒數第3項 45 print $cost[20]; # 不存在的項目,空值,不會報錯。
這裡要注意的是取得陣列項目時,他的變數前面是錢號'$'而不是'@'
如果索引值超過範圍那就會出錯,例如 $cost[7] 或 $cost[-7] 都超過範圍了。
取得最末項的索引值
陣列索引值是從0開始編號,0, 1, 2, ....,上面把索引值變為負,就是從尾端取回來的意思,但這樣還是無法知道到底最後一個項目的索引值是多少。PERL提供了一個特殊變數 '$#' 就能取得最後一項的索引值。
print $#cost ."\n"; # 5
取得陣列的大小
要取得陣列的大小,可以直接把陣列純量化(scalar):
# 直接把陣列指定給純量變數 $length= @cost; # 6 $length= scalar @cost; # 6 $length= scalar(@cost); # 6 建議寫法
因為把陣列'@',直接指給變數,這樣就會得到陣列的個數,以上三種方法都可以。
另外還有一個方法是直接把最末項索引值加1:
$length = $#cost +1;
判斷陣列是否為空?
直接放陣列去判斷,如果是空陣列,@array的純量會回傳個數,也就是0。
if( !@array) { #這是空陣列 }
判斷項目是否存在?
if(! defined($array[10]) ){ #這個項目不存在 }
只有確實不存在的項目,defined才會為假,如果項目值為空字串''或0都會為真。
清空一個陣列
@array=();
陣列的傾印
如果要把陣列的內容印出來,在PERL有一種很簡單的方法:
print @week; # MonTueWedThuFriSatSun print "@week"; #Mon Tue Wed Thu Fri Sat Sun
第1行直接把項目印出來,在PERL的運作中會把@week中的項目依序向左送出給print傾印,所以結果會是黏在一塊的項目。
第2行使用雙引號時,在第02單元有提過,雙引號內的變數會把他展開,因此,PERL把他展開,並用空白當分隔。
這個單元先提一下陣列的基本特性,下一單元來說明陣列的操作。
使用迴圈的傾印
在迴圈那單元還會再說明,這裡先給範例
foreach $one (@name){ print $one. "\n"; }
上一篇 06-運算子 #2
回到目錄 01-撰寫第一隻PERL程式
下一篇 08-陣列 #2 -- 操作