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

Wor*_*ame 4 perl

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

#!/usr/bin/perl
use warnings;
print"Is two equal to four? ", 2 == 4, "\n";
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,这是输出:

Is two equal to four? 
Run Code Online (Sandbox Code Playgroud)

下面进一步解释,2 == 4的值是未定义的,但这对我来说似乎令人困惑和反直觉.两个显然不等于四,4和4之间的相同比较将产生真,导致输出结束时为'1'.为什么表达式不返回false?

amo*_*mon 12

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

返回布尔值的运算符将返回1true,如果为false,则返回数值为零的特殊值和字符串化时的空字符串.我建议你加零来对结果进行编号:

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

输出:

Is two equal to four? 0
Run Code Online (Sandbox Code Playgroud)


edi*_*len 5

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

use strict;
use warnings;

print "Is two equal to four? ", 2 == 4 ? 'True' : 'False', "\n";
#This print False.
Run Code Online (Sandbox Code Playgroud)