Perl:为什么我不能打印!$ num?当num为1时,它不能打印0

时间:2014-09-24 18:42:47

标签: perl

print !$num;  

当$ num为1时,我希望看到0.但是,没有打印任何内容。为什么?感谢您的任何评论。

以下是我尝试的一些测试。这符合我的问题。

print 1;     # 1
print 0;     # 0
print !1;    # (nothing)
print !0;    # 1
print !1 == 0;  # 1

迈克尔

3 个答案:

答案 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时它是不明确的。

相关问题