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

  • 本文关键字:打印 不能 num Perl perl
  • 更新时间 :
  • 英文 :

print !$num;  

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

以下是我尝试过的一些测试。 这与我的问题一致。

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

迈克尔

Perl 中的 "false" 布尔值是一个特殊的值,当它被计算为字符串时被视为"",但在数字上下文中,它被视为0

这就是为什么在打印否定的 true 值时,您会看到空字符串:

$ perl -MData::Dump -e 'dd !1'
""

要查看值 0 ,您必须在数字上下文中使用它。 您可以通过简单地将 0 添加到值中来执行此操作:

$ perl -MData::Dump -e 'dd 0 + !1'
0

有关布尔值的更多信息,请查看 perldata - 标量值。

根据文档,

数字 0、字符串 '0' 和 " 、空列表 (( 和 undef 在布尔上下文中都是假的。所有其他值均为真。 用 ! 否定真值或不返回特殊的假值。 当计算为字符串时,它被视为 " ,但作为一个数字,它 被视为 0。大多数返回真或假的 Perl 运算符的行为 这边。

print!1评估为字符串,因此将其视为""


如果在数字上下文中评估!1,则将其视为0

$ perl -MData::Dumper -e'print Dumper !1+!1'
$VAR1 = 0;

在一般意义上,有各种各样的值是true的,有各种各样的值是false的。因此,not true在布尔上下文中是有效的,但在print时却模棱两可。