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

ask*_*ker 10 perl

可能重复:
如何在Perl中使用布尔变量?

[root@ ~]$ perl -e 'if(true){print 1}'
1
[root@ ~]$ perl -e 'if(false){print 1}'
1
Run Code Online (Sandbox Code Playgroud)

我很震惊,true并且false通过if......

bvr*_*bvr 13

如果你运行严格:

perl -Mstrict -e 'if(true) { print 1 }'
Run Code Online (Sandbox Code Playgroud)

你会得到原因:

Bareword "true" not allowed while "strict subs" in use at -e line 1.
Run Code Online (Sandbox Code Playgroud)

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

use constant { true => 1, false => 0 };
if(false) { print 1 }
Run Code Online (Sandbox Code Playgroud)


Ted*_*opp 9

你正在使用裸字truefalse.光秃秃的话是坏事.如果你试试这个:

use strict;
use warnings;
if (true){print 1}
Run Code Online (Sandbox Code Playgroud)

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

Bareword "true" not allowed while "strict subs" in use at - line 3.
Execution of - aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

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


yst*_*sth 5

始终使用警告,特别是在单行上.

Perl没有真或假的命名常量,并且没有警告或严格启用,"裸字"(可以是常量或函数但不是)可以自由地解释为字符串.所以,你正在做的if("true")if("false"),而且比其他所有字符串""或者"0"是真实的.