4

我来自 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 的值是未定义的,但这对我来说似乎令人困惑和违反直觉。2 显然不等于 4,并且 4 和 4 之间的相同比较将产生真,导致输出末尾的“1”。为什么表达式不返回假?

4

4 回答 4

12

确实如此。但是,Perl 没有trueand false。它具有真值和假值。

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

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

输出:

Is two equal to four? 0
于 2013-08-23T10:14:58.780 回答
5

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

use strict;
use warnings;

print "Is two equal to four? ", 2 == 4 ? 'True' : 'False', "\n";
#This print False.
于 2013-08-23T10:33:39.933 回答
1

Perl 没有trueandfalse类型,因此评估任何类型的比较的结果都不可能是它们。相反,您会得到等效的值。

于 2013-08-23T10:14:54.437 回答
0

PHP 也是如此:

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

将输出以下内容:

[1][] 

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

希望这可以帮助 :)

问候

克里斯托弗

于 2013-08-23T10:17:26.123 回答