为什么当$ v = false时,我没有从perl得到错误;

问题描述

我在命令行上写道:

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次:两次对未引用的裸词,两次对字符串的数字比较。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...