为什么不= 2 == 4返回false?

时间:2013-08-23 10:11:34

标签: perl

我来自C ++背景,我正在尝试使用Beginning Perl学习perl。但是,第二章中的这段代码让我感到困惑:

#!/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?

4 个答案:

答案 0 :(得分:12)

确实如此。但是,Perl没有truefalse。它具有真实和虚假的价值。

返回布尔值的运算符在true时返回1,在false时,返回数值为零的特殊值和字符串化时的空字符串。我建议您通过添加零来对结果进行编号:

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

输出:

Is two equal to four? 0

答案 1 :(得分:5)

了解perl如何评估此表达式的一种方法是应用三元运算符。如果左侧的表达式为true,则返回问号后的值,否则如果表达式为False,则返回冒号后的值。

use strict;
use warnings;

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

答案 2 :(得分:1)

Perl没有truefalse类型,因此评估任何类型的比较的结果都不是它们。你得到的是等价的值。

答案 3 :(得分:0)

PHP也是如此:

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

将输出以下内容:

[1][] 

布尔值TRUE值转换为字符串“1”。 Boolean FALSE转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

希望这会有所帮助:)

问候

克里斯托弗