这很奇怪.
下列:
下列:
$sum = !0; print $sum;
打印出1,你会期望.但是这个
$sum = !1; print $sum;
没打印出来为什么?
解决方法
要小心:你写的是没有做你认为的事情.记住,perl没有真正的布尔数据类型.它有标量,散列,列表和引用.那么它处理真/假值的方式是上下文的.除了未定义的变量,空列表,空字符串和数字0之外,所有内容都以perl计算为“true”.
那么你的代码正在做的是将一个值的倒数换成“false”,这可以是上面列出的值.按照惯例,为了简单起见,perl返回1(尽管你不应该依赖它;它可以非常好地返回一个包含一系列随机数的列表,因为它也将评估为“true”).
当您要求评估为“true”的值的倒数时,会发生类似的事情.实际上打印出来的不是“没有”,它是空字符串(”),正如我所提到的,它在布尔表达式中评估为“false”.你可以查看这个:
print "This evaluates to false\n" if( (!1) eq '');
如果您要求为什么perl扔出空字符串而不是其他“false”值之一,那么这可能是因为perl是用来处理字符串的,这是一个完全合理的字符串来回传.