[精讚] [會員登入]
55

Perl 的特殊變數:$_、$&、$!

介紹perl的特殊變數 $_ 、 $&、$!

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

複製連結 Perl 的特殊變數:$_、$&、$!@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-03-21 01:29:27 最後編修
2019-01-04 11:28:36 By 張○○
 

Perl 的特殊變數算是語言中最怪異的。 此文分為兩單元,介紹

perl 的特殊變數 $_,$& 和 $!

 

$_

$_  這個以中文來說,就是「這一個變數」,也是所有迴圈會用到的預設變數。例如要讓perl 印出1到100:

for(1..100){
    print $_;
}

結果:1234567891011121...中間略....96979899100

第2行的 $_ 就是預設的變數,代表目前迴圈所指示的數。等同於C寫的

  for( int ii; ii<=100; ii++){ printf ("%d",ii);  }

對perl 來說變數都省略。

$_ 在巢狀迴圈就要格外小心,因為在內層迴圈中的 $_ 代表是內層迴圈變數,在外層迴圈的代表的是外層迴圈的變數。

for(5..7){
    print "$_\n";
    for(1..3){
        print "child $_\n";
    }
}

結果:

5
child 1
child 2
child 3
6
child 1
child 2
child 3
7
child 1
child 2
child 3

 

$&

$& 代表比對範圍內的全部結果,來看以下例子

$str="This is an international issue .";
if( $str =~ /is/)
{
    print "\$&=$&\n";
}

結果

$&=ldap;  (program; !slapd) and (level; info..err)
$+=(program; !slapd) and (level; info..err)

為什麼需要 $+,而不直接用 $1 取出第一個比對的結果,我特別舉這個例子,因為比對的條件有兩個,結果可能會是其中一個條件符合,可能是其中第2或第3 個比對的結果,如果不能確定是 $2, $3 ,就用$+ 來取最後一個吧。另外一個理由:在 | 的右邊,他的變數是繼續算下去,而不是從1再開始算。

至於$&則是取得符合比對內容的部分,不是取回全部字串喔。

 

$!

 $! 這特殊變數會顯示錯誤的訊息,但還是有一點差別,看以下開啟檔案的例子,假設檔案 test.txt 並不存在:

open(FILE, "test.txt") or die $!;

結果:
沒有此一檔案或目錄 at ./oparse.pl line 32.

$! 有說明錯誤和行號

 

這時把 $! 寫到引號中,再加一個換行,他就不會顯示錯誤的行號了。

open(FILE, "test.txt") or die "$!\n";

結果:
沒有此一檔案或目錄

 

如果要再懶一點,連 $! 都省了,但是出來的結果訊息就不知錯誤詳情了。

open(FILE, "test.txt") or die;

結果:
Died at ./example.pl line 32

 


編輯 2009-11-18 21:06:12

你可能感興趣的文章

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

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

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

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

[PERL] 17-參照 PERL的參照,就是指標

[PERL] 取得字串長度 使用length來取得字串長度

PERL的真值和假值(布林值) 整理Perl中的判斷真假的結果

[PERL] 簡易檢查網頁記錄檔ip來源統計 利用PERL來檢查網頁記錄檔ip來源統計的簡易程式

Perl 計算經過的時間 Perl 計算程式執行經過的時間

Perl 的列舉寫法(map list) 使用列舉的寫法來設定陣列,非常的強大

我有話要說


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

訪客留言

[無留言]

隨機好文

使用Google尋找你的手機 這近發現google竟然可以用來找android的手機,而且不需要經過什麼設定或安裝軟體。

如何在linux下執行java 原生的java應用程式可以使用簡單的方法在console下面寫出來,適合作簡單的應用

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

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

世紀帝國征服者新版本--被遺忘的帝國 世紀帝國征服者新版本--被遺忘的帝國 世紀二代的征服者是精典遊戲中的精典,aofe更好玩...