2013-08-23 129 views
4

我來自C++的背景,並試圖用Perl開始學習Perl。然而,這段代碼在第二章中已經留下了困惑:爲什麼不2 == 4返回false?

#!/usr/bin/perl 
use warnings; 
print"Is two equal to four? ", 2 == 4, "\n"; 

當我運行的代碼,這是輸出:

Is two equal to four? 

這在下文中進一步解釋說,2 ==價值4是不確定的,但這對我來說似乎令人困惑和反直覺。兩個顯然不等於四,並且4和4之間的相同比較將產生真實,導致在輸出結束時產生'1'。爲什麼表達式不會返回false?

+0

Perl6在bool主題中更直觀http://faq.perl6.org/ – teodozjan

+1

'2 == 4? '是':'不' – ikegami

+3

另請參見[錯誤的定義](http://stackoverflow.com/questions/1036347/how-do-i-use-boolean-variables-in-perl/5655485#5655485) – ikegami

回答

12

它的確如此。但是,Perl沒有truefalse。它具有真實和虛假的價值。

返回布爾值的運算符在返回true時將返回1,如果爲false,則返回一個數值爲零的特殊值和字符串化後的空字符串。我建議你numify通過添加零結果:

use warnings; 
print"Is two equal to four? ", 0+(2 == 4), "\n"; 

輸出:

Is two equal to four? 0 
+1

不要忘記提及0E0雖然它是數字0不是假事件http://stackoverflow.com/questions/129945/what-does-0-but-true-mean-in-perl – teodozjan

+1

@teodozjan *字符串*''0E0「'在數字上是零,但是是真的。這是因爲真相首先由字符串值確定,然後由數值確定。這個怪癖與這個問題或我的答案無關。 – amon

+0

恕我直言,對於perl邏輯系統的新手來說,值得一提的是。 – teodozjan

1

Perl沒有truefalse類型,所以評估任何一種比較的結果都不是它們。你會得到相同的值。

0

也是一樣的PHP:

echo "[" . (0 == 0) . "][" . (0 == 1) . "]"; 

將輸出如下:

[1][] 

布爾值TRUE被轉換爲s敲「1」。布爾FALSE被轉換爲「」(空字符串)。這允許在布爾值和字符串值之間來回轉換。

希望這有助於:)

問候

克里斯托弗

+0

在Perl中,規範的假值具有與其相關的數值('0')。這可以防止在您第一次將其用作數字時發出警告。 –

5

的一種方式,看看perl的是如何評估這一expresion是應用三元運算符。如果左側的表達式爲真,它將在問號後面返回值,否則如果表達式爲False,則它將返回冒號後面的值。

use strict; 
use warnings; 

print "Is two equal to four? ", 2 == 4 ? 'True' : 'False', "\n"; 
#This print False.