[root@ ~]$ perl -e 'if(true){print 1}'
1
[root@ ~]$ perl -e 'if(false){print 1}'
1
我很惊讶true
和false
都通过了if
......
答案 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)
您使用的是true
和false
。光秃秃的话是坏事。如果你试试这个:
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”。这些值没有内置关键字。您可以使用0
和1
(如果它真的困扰您,请坚持use constant { true => 1, false => 0};
。)
答案 2 :(得分:5)
始终在单行上使用警告,尤其是。
Perl没有真或假的命名常量,没有警告或严格启用,"裸字" (可以是常数或函数但不是某些东西)被静默地解释为字符串。因此,您正在执行if("true")
和if("false")
,除""
或"0"
以外的所有字符串均为真。