print !$num;
当$ num为1时,我希望看到0.但是,没有打印任何内容。为什么?感谢您的任何评论。
以下是我尝试的一些测试。这符合我的问题。
print 1; # 1
print 0; # 0
print !1; # (nothing)
print !0; # 1
print !1 == 0; # 1
迈克尔
答案 0 :(得分:5)
Perl中的“false”布尔值是一个特殊值,当作为字符串计算时,它被视为""
,但在数字上下文中,它被视为0
。
这就是为什么在打印否定的真值时,你会看到空字符串:
$ perl -MData::Dump -e 'dd !1'
""
要查看值0
,您必须在数字上下文中使用它。只需在值中添加0即可完成此操作:
$ perl -MData::Dump -e 'dd 0 + !1'
0
有关布尔值的更多信息,请查看perldata - Scalar Values。
答案 1 :(得分:4)
根据docs,
数字0,字符串'0'和“”,空列表()和undef 在布尔上下文中都是false。所有其他值都是真的。 否定真正的价值!或不返回特殊的假值。 当评估为字符串时,它被视为“”,但作为数字,它被视为 被视为0.大多数返回true或false的Perl运算符都表现出来 这样。
print
正在将!1
评估为字符串,因此将其视为""
。
如果您在数字上下文中评估!1
,则会将其视为0
。
$ perl -MData::Dumper -e'print Dumper !1+!1'
$VAR1 = 0;
答案 2 :(得分:0)
从一般意义上讲,有true
的各种值和false
的各种值。因此not true
在布尔上下文中有效,但在print
时它是不明确的。