$a="";
$b="n";
$c = !$a;
$d = !$b;
print $c , "\n" , $d;
if($d == 0){
print "zero";
}
我写了这个perl程序,我希望输出如下
1
0Zero
但它打印
1
zero
谁能解释我为什么会这样?
Perl中的变量根据上下文被视为数字或字符串。如果在分配时未将某些内容视为数字,则Perl在打印时会将其视为字符串。
因此,Perl中的假值与具有更强类型的语言(由我加重)相比有点不同:
在布尔上下文中,数字0,字符串'0'和“”,空列表()和undef均为false。所有其他值都是正确的。否定真值!或不返回特殊的false值。当以字符串形式求值时,将其视为“”,而将其视为数字,则将其视为0。大多数返回true或false的Perl运算符都将以这种方式运行。
所以,这里的问题是,!
是一个逻辑运算符,而不是一个算术之一。因此,它返回逻辑上错误的值,根据上下文以不同的方式表示该值。
如果要确保将某些内容视为数字,则可以选择几种方法。您可以执行算术运算,这会使Perl将结果视为数字:
$d=!$b+0;
print $d;
您可以使用sprintf
或printf
显式控制显示:
printf '%d', $d;
或者您可以使用int
:
print int $d;
(注意:这一切看起来似乎有些复杂。但是它的设计目的是使该语言能够满足您的需要,而您不必去考虑它。通常它会这样做。在某些情况下,您偶尔会遇到这种情况。需要执行Perl的默认行为以外的其他操作。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句