为什么perl将字符串“0”视为false?

为什么perl将字符串“0”视为false?,perl,Perl,我在文本中发现字符串“0”等价于0,因此在PERL中该条件为false 但当我看到ASCII表时,“0”是ASCII 48。那么为什么Perl在这个控制结构中把字符串“0”看作一个值0?< /P> if ('0'){ print "Statement1 \n"; } else { print "statement2\n"; } 因为它被指定这样做 数字0、字符串“0”和、空列表和未定义 在布尔上下文中都为false。所有其他值均为真

我在文本中发现字符串“0”等价于0,因此在PERL中该条件为false

但当我看到ASCII表时,“0”是ASCII 48。那么为什么Perl在这个控制结构中把字符串“0”看作一个值0?< /P>
if ('0'){
        print "Statement1 \n";
        }
 else {
        print "statement2\n";
      }

因为它被指定这样做

数字0、字符串“0”和、空列表和未定义 在布尔上下文中都为false。所有其他值均为真。 对真值的否定!否则返回一个特殊的false 价值当作为字符串计算时,它被视为,但作为数字,它被视为0

这就是规格。这种行为是符合的

至于规范为何如此编写,Perl在字符串和数字之间进行隐式转换,在这方面不使用ASCII值,而是使用十进制值。因此,在此上下文中以与0相同的方式处理“0”与允许“9”+1返回10而不是“:”下一个ASCII值的行为是一致的。

nul字符\0是否应该为false0'是ASCII 48和EBCDIC 240;如果有其他编码恰好是0,那么它会是false吗?因为0和“0”是等价的。更好的问题是为什么“0E0”不是假的。效率