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 = '';
如果我对数组或标量取反会怎样?使用下面的脚本我得到了这些结果:
$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 = '';