【问题标题】:Why doesn't 2==4 return false?为什么 2==4 不返回假?
【发布时间】:2013-08-26 08:24:18
【问题描述】:

我来自 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”。为什么表达式不返回 false?

【问题讨论】:

  • Perl6 在 bool 主题 faq.perl6.org987654321@ 中会更直观
  • 2==4 ? 'Yes' : 'No'
  • 另请参阅,definition of false
  • 打印了什么?没有。没有什么是真的还是假的?在 perl 中,没有什么是假的。

标签: perl


【解决方案1】:

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

use strict;
use warnings;

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

【讨论】:

    【解决方案2】:

    确实如此。然而,Perl 没有truefalse。它有真值和假值。

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

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

    输出:

    Is two equal to four? 0
    

    【讨论】:

    • 不要忘记提到 0E0 不是错误事件,尽管它在数字上是 0 stackoverflow.com/questions/129945/…
    • @teodozjan string "0E0" 在数值上为零,但确实如此。这是因为真理首先由字符串值确定,然后由数值确定。这个怪癖与问题或我的答案无关。
    • 恕我直言,对于 perl 逻辑系统的新手来说,值得一提。
    【解决方案3】:

    PHP 也是如此:

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

    将输出以下内容:

    [1][] 
    

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

    希望这会有所帮助:)

    问候

    克里斯托弗

    【讨论】:

    • 在 Perl 中,规范的 false 值具有与之关联的数值 (0)。这可以防止它在您第一次将其用作数字时发出警告。
    【解决方案4】:

    Perl 没有truefalse 类型,所以任何比较的结果都不可能是它们。相反,您会得到等价的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2012-08-27
      • 2014-09-07
      • 2021-11-19
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多