[精讚] [會員登入]
6122

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

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

分享此文連結 //n.sfs.tw/12996

分享連結 Perl 的特殊變數:$_、$&、$!@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 14:11:30 最後編修
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

END

你可能感興趣的文章

[PERL] 23-多執行緒 而多執行緒的程式,可在一次執行程式時間,同時進行多線程的計算,在效率上可獲得即大的提升。

[PERL] 用substr切割及置換字串 perl用substr來切割及置換字串

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

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

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

[PERL] 01-撰寫第一隻PERL程式及目錄 PERL的系列教學文,適合有其他程式經驗但沒學過PERL的人

隨機好文

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

[札記] 2016.7~12月札記 札記,只是札記

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

[JAVA] JWS, JWT, JWE, JOSE是什麼? [JAVA] JWS, JWT, JWE, JOSE是什麼?非常的複雜,儘量來搞清楚..

APACHE的記錄檔格式 LogFormat 語法 在APACHE中有定義一些記錄的語法模版 在 /etc/httpd/conf/httpd.conf 中: LogForm