[精讚] [會員登入]
711

[PERL] 前置if和後置if (if修飾子)的差別

perl的if可以拿來作為後置修飾子使用,此外還有一個unless像是if的相反,分析他們的差異

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

複製連結 [PERL] 前置if和後置if (if修飾子)的差別@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 10:12:02 最後編修
2017-01-24 14:42:49 By 張○○
 

自動目錄

會寫這篇文章,主要是解決自己在 前置if  和 後置if  (稱為 if 修飾子)的差別

前置if:大家慣用的寫法

  if(A==B) { ... }

後置if:PERL特有的寫法

  ... if (A==B) O

  ... if  A==B  O 後置表示法後面的刮號可以省略

  {...} if  A==B  X 後置表示法前面不能有大括號,會syntax error

這兩種寫法在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;  來得簡單。

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

你可能感興趣的文章

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

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

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

[PERL] 11- 雜湊的範例 Perl 的幾個雜湊範例

[PERL] Perl 不立即輸出的列印緩衝區問題 解決Perl 不立即輸出而是最後一次輸出的列印緩衝區問題

[PERL] 04-基本比對 perl的正規表達示基本比對

[PERL] 08-陣列 #2 --操作 更多perl陣列的操作,如拆開、黏合、取出、加入等等

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

[PERL] 常態分配亂數產生函數 一般而言我們使用程式內建的 rand 函數取得的亂數是平均分配的,但如果需要常態分配的亂數產生器該怎麼做?

自行撰寫syslog server建立資訊安全控管中心#3 -- 程式下載和安裝 利用PERL將syslog收攏到資料庫的程式,程式下載和安裝

我有話要說


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

訪客留言

[無留言]

隨機好文

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。

正則表達式:Email名稱防止連續輸入點(.)及下底線(_) Email的名稱中要允許特殊符號,但又不允許連續出現的正則表達式

真正的喜悅 幾種喜悅的類型,雖然很簡單,卻是很多人百思不得其解的難題..

安裝git centos/freebsd/windows安裝git

[Freebsd] 建立ramdisk Freebsd 建立ramdisk,作為高速的暫存空間