可能重复:
如何在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)
你正在使用裸字true和false.光秃秃的话是坏事.如果你试试这个:
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".这些值没有内置关键字.你可以使用0和1(或坚持,use constant { true => 1, false => 0};如果它真的困扰你.:)
始终使用警告,特别是在单行上.
Perl没有真或假的命名常量,并且没有警告或严格启用,"裸字"(可以是常量或函数但不是)可以自由地解释为字符串.所以,你正在做的if("true")和if("false"),而且比其他所有字符串""或者"0"是真实的.