[精讚] [會員登入]
1546

[PERL] 07-陣列 #1 -- 基本

perl的陣列

此文完整連結 http://n.sfs.tw/11669

複製連結 [PERL] 07-陣列 #1 -- 基本@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-18 15:21:17 最後編修
2017-08-21 22:26:11 By 張○○
 

自動目錄

PERL的陣列非常的靈活且強大

陣列的基本性質

陣列使用符號 '@'作為開頭,並接上名稱  @arr_name

定義一個空陣列

  @arr_name=();

陣列的內容可以直接將清單指定到陣列即可,例如設定一個字串陣列:

  @week=('Mon','Tue','Wed','Thu','Fri','Sat','Sun');

字串陣列中每個項目都得用一堆引號包起來不免麻煩,PERL有方法讓你偷懶,就是使用qw這個函數:

  @week=qw(Mon Tue Wed Thu Fri Sat Sun);

qw() 中不需要引號和逗號,它以空白當作每個項目的分界;但也因此如果你的字串中有空白的存在,就不能用qw

定義一個數值陣列

  @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] 都超過範圍了。

沒帶索引值的$cost 和 $cost[1]完全沒有關係,也和@cost沒有關係,所以你可以指定 $cost = 'anything' 也不會影響到 $cost[n]帶出來的結果

 

取得最末項的索引值

陣列索引值是從0開始編號,0, 1, 2, ....,上面把索引值變為負,就是從尾端取回來的意思,但這樣還是無法知道到底最後一個項目的索引值是多少。PERL提供了一個特殊變數 '$#' 就能取得最後一項的索引值。

print $#cost ."\n"; # 5
備註、如果陣列為空,$#arr 傳回的值是-1

 

取得陣列的大小

要取得陣列的大小,可以直接把陣列純量化(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 -- 操作

你可能感興趣的文章

[PERL] 21- 使用資料庫 Perl 連Mysql

[PERL] 可用中文取名的中文名函式和package 原來perl 也可以用中文當函式、類別、方法的名稱啊

自行撰寫syslog server建立資訊安全控管中心#4 -- 過濾條件設定 利用PERL將syslog收攏到資料庫的程式,過濾條件設定

[PERL] 檢查IP是否在某個網段內:matchcidr 檢查IP是否在某個網段內 matchcidr in perl

[PERL] 22-日期和時間 Perl 取得日期時間的方法整理,使用 localtime等多種函數

[PERL] 19-模組的安裝和維護 模組的安裝和維護

[PERL] 位元運算 Bitwise operation PERL的位元運算整理

[PERL] 05-運算子 #1 PERL的運算子介紹,總共有21種

[PERL] 20- 檔案目錄處理 PERL寫入和讀出檔案

[PERL] Regex 字元集(群組) 幾個Perl在regular express會用到的特殊符號notation:字元集

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[Freebsd] 使用 ADSL 撥接上網 Freebsd上要使用 ADSL 撥接上網,該如何設定?

安裝SPHINX支援中文 新版本的 sphinx 和舊版不同,網路上很多範例和教學是不能用的。此文是安裝和設定方法分享

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很

外匯課程經驗 有天遇到某個朋友的正妹朋友,說她有個很棒的外匯投資課程,要我們去聽,只收場地費200大洋。她又說續效最差一個月也有1%,誰還在苦哈哈上班?