2011-04-04 127 views
3

這做什麼,我會就喜歡這段代碼做了什麼?

if (grep {/$dn/} @ad_sys) { 
    $is_system = 1; 
} 

但這總是返回1

if (grep $_ == $dn, @ad_sys) { 
    $is_system = 1; 
} 

第二塊做什麼?

+0

如果您給出$ dn和@ad_sys的值,這可能很有幫助。 – Ingo 2011-04-04 13:12:27

回答

5

==用於數字比較,如果需要字符串比較使用eq

+2

爲上下文擴展:在Perl中,任何字符串都可以隱式轉換爲數字。如果字符串以一個數字開始,那麼數字就是結果,否則結果爲0.所以像''foo'=='bar''這樣的比較與'0 == 0'是一樣的。如果你使用warings;'你會得到像'Argument'bar'這樣的警告在數字eq(==)中不是數字,讓你知道哪裏出了問題。 – 2011-04-04 15:17:36

4

它過濾了列表@ad_sys中的那些元素,這些元素的數值爲等於$ dn。 然後,如果結果不爲空,則條件爲真,並輸入if塊。

3

這兩段代碼有兩點區別。

首先,正如其他人已經指出的那樣,存在數值比較運算符的問題。

但其次,/ $ dn /檢查$ _是否包含$ dn中的數據。 $ _ eq $ dn檢查$ _是否等於$ dn。

這種差異可能會導致問題,例如,如果您的數據由從尚未被刪除的文件中讀取的行構成,以刪除換行符。