Perl中是否有内置的true / false布尔值?

时间:2011-08-04 04:30:36

标签: perl

  

可能重复:
  How do I use boolean variables in Perl?

[root@ ~]$ perl -e 'if(true){print 1}'
1
[root@ ~]$ perl -e 'if(false){print 1}'
1

我很惊讶truefalse都通过了if ......

3 个答案:

答案 0 :(得分:12)

如果你运行严格:

perl -Mstrict -e 'if(true) { print 1 }'

你会得到原因:

Bareword "true" not allowed while "strict subs" in use at -e line 1.

它被解释为字符串"true""false",它始终为true。 Perl中没有定义常量,但您可以自己完成:

use constant { true => 1, false => 0 };
if(false) { print 1 }

答案 1 :(得分:8)

您使用的是truefalse。光秃秃的话是坏事。如果你试试这个:

use strict;
use warnings;
if (true){print 1}

你可能会得到这样的东西:

Bareword "true" not allowed while "strict subs" in use at - line 3.
Execution of - aborted due to compilation errors.

任何看起来不像0的定义值都被视为“true”。任何未定义的值或任何看起来像0的值(例如0"0")都被视为“false”。这些值没有内置关键字。您可以使用01(如果它真的困扰您,请坚持use constant { true => 1, false => 0};。)

答案 2 :(得分:5)

始终在单行上使用警告,尤其是

Perl没有真或假的命名常量,没有警告或严格启用,"裸字" (可以是常数或函数但不是某些东西)被静默地解释为字符串。因此,您正在执行if("true")if("false"),除"""0"以外的所有字符串均为真。