Perl:如何解释数组和标量的否定?

Perl: How is to be interpreted a negation of an array and scalar?

如果我对数组或标量取反会怎样?使用下面的脚本我得到了这些结果:

$x = 0
-------------
$x:   0
!$x:  1

$x = 1
-------------
$x:   1
!$x:  

@x = ()
-------------
@x:   
!@x:  1

@x = qw ( a b )
-------------
@x:   ab
!@x: 

我想如果我对非空数组或标量进行求反,我将得到 '',这意味着在布尔上下文中 false。这是正确的吗?

有没有办法让它“可见”?

我想知道为什么 $x=1;!$x 给出 '' 而不是 0 因为 $x=0!$x 给出 1 ].

同样在这里我假设每种 TRUE 对象如果取反则给出 '',每种 FALSE 对象如果取反则给出 1。

写下所有这些,我意识到 Perl 非常一致。尽管如此,“标准”FALSE 是 ''(不可见)让我感到不舒服。


代码:

my $x = 0;
print "$x = 0\n-------------\n";
print "$x:   ",$x,"\n";   # 0
print "!$x:  ",!$x,"\n\n";  # 1
print "\n";

$x = 1;
print "$x = 1\n-------------\n";
print "$x:   ",$x,"\n";   # 1
print "!$x:  ",!$x,"\n\n";  #    (empty?)


my @x = ();
print "\@x = ()\n-------------\n";
print "\@x:   ",@x,"\n";   # a b
print "!\@x:  ",!@x,"\n\n";  # 

@x = qw ( a b );
print "\@x = qw ( a b )\n-------------\n";
print "\@x:   ",@x,"\n";   # 1
print "!\@x:  ",!@x,"\n";  #    (empty?)

!(非)运算符将其参数置于标量上下文中。标量上下文中的数组 returns 它的大小 -- 它包含多少元素。所以在你的情况下,当你这样做时

!@x

你基本上是在做:

!2

如您所述,这是空字符串,而不是 0

它不是不可见的,但是您用来显示它的方法没有显示它。例如,您可以使用 Data::Dumper 模块打印它:

use Data::Dumper;

print Dumper !@a;

将打印

$VAR1 = '';