问题描述
我在命令行上写道:
var explain = "yes";
myfunction() {
....
}
myfunction2() {
if ( explain == "yes") {
... } }
并没有产生错误,而是返回了“ 1”!
我记得过去,这返回了一个错误,以提醒我perl没有布尔类型。同时,perl中有什么变化?还是我记错了,而这始终是有效的代码?
解决方法
在没有strict的情况下,裸字false
被解释为字符串('false'
)。使用数字==
会将其数字化为0,并且将"true"
数字化为零。
B::Deparse清楚地表明了这一点:
$ perl -MO=Deparse -e '$v=false; if($v==true){print 1;}'
$v = 'false';
if ($v == 'true') {
print 1;
}
warnings会警告您4次:两次对未引用的裸词,两次对字符串的数字比较。