2016-12-23 21 views
0

我在文中發現字符串'0'等於0,因此在PERL中條件爲false。爲什麼perl將字符串「0」視爲false?

但是,當我看着ASCII表'0'是ASCII碼48.那麼爲什麼perl在這個控制結構中考慮字符串'0'作爲值0

if ('0'){ 
     print "Statement1 \n"; 
     } 
else { 
     print "statement2\n"; 
     } 
+1

如果一個nul字符'「\ 0」'爲假? '0'是ASCII 48和EBCDIC 240;如果在碰巧是0的地方有其他編碼,那麼它會是假的嗎? – ysth

+1

因爲「0」和「0」是等價的。 (更好的問題是爲什麼不是'0E0'錯誤。效率?) – ikegami

回答

10

因爲它被指定這樣做。

數字0,字符串'0'和'',空列表「()」和「undef」 在布爾上下文中都是錯誤的。其他所有值都是正確的。 通過「!」否定真實值或「不是」會返回一個特殊的假值 值。當作爲字符串評估時,它被視爲「',但作爲數字,它被視爲0.

這就是規範。行爲符合。


至於爲什麼規範是這麼寫的 - 的Perl使得字符串和數字之間隱含轉換的做法,在這方面不使用ASCII值,但十進制值。因此在本上下文中以與0相同的方式處理'0'因此與允許'9'+1返回10而不是':'(下一個ASCII值)的行爲一致。

相關問題