[精讚] [會員登入]
5735

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,你得知道這幾點 Perl 有不少奇異的地方,值得看一看

[PERL] 使用CPAN安裝模組 在Linux 上,CPAN 可以用來安裝或管理 perl 的模組,此文教你怎麼做。

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

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

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

Perl 的特殊變數:$` $' $#陣列 $1 $2 .. $10 \1 \2 .. \10 介紹Perl 的 $` $' $#array $1..$10 \1..\10這些變數

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

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