自動目錄
會寫這篇文章,主要是解決自己在 前置if 和 後置if (稱為 if 修飾子)的差別
前置if:大家慣用的寫法
if(A==B) { print "ok"; }
後置if:PERL特有的寫法
print "ok" if (A==B) O
print "ok" if A==B O 後置表示法後面的刮號可以省略
{print "ok";} if A==B X 後置表示法前面不能有大括號,會syntax error
前置及後置if兩種寫法在PERL都可行,以下面讀文件test.txt的範例為例,如果讀不到顯示錯誤的訊息:
前置if
if( !open(FILE, "test.txt") ) { die $!; };
後置if
die $! if !open(FILE, "test.txt");
執行的結果會不會一樣?其實結果完全是一樣的。
前置和後置if的差異
兩者的差別只是「可讀性」的不同,用 前置if 是不是比較容易了解?
硬要說兩者除了可讀性外的差別,那就是:使用後置if 的方式可以少掉那個perl 一定要的大括號( 這是我覺得perl 最大的缺點),也可以少掉條件那個小括號,使用後置會比較方便:
前置 if
if( 條件 ){ 處理.... }後置 if
處理.... if 條件;
舉例:
if ( $s>=60){ print "PASS\n"; } 不如寫成 print "PASS\n" if $s>=60; 來得簡單。
要處理的指令超過1行以上的話,後置if就無法使用了。
if的相反:unless
再來談談 perl 有的 unless,這也是perl特有的修飾子:
unless 的意思就是 if not,也有前置和後置兩種用法。
例如成績不到60不及格,$s是成績:
if( $s >=60){ print "PASS\n"; }
可以寫成
unless( $s <60){ print "PASS\n"; }
口語來說:除非 $s <60 ,否則就印 PASS,他的後置表示法也很簡單:
print "PASS\n" unless $s <60;
結論
只有一行執行的式子,就交給後置 if 去表現吧,因為後置表示法前面只能有一個指令;而要多行處理的只能用前置if。
如果覺得 if not 或 if ! 礙眼才用unless,否則對我而言用unless 有時會反而會把我清楚的大腦搞混...
至於書上說什麼「重點在條件的用前置,重點在處理的用後置」我看不出差異。
原文 2009-11-18 23:04:34