[英]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:
我想如果我對非空數組或標量進行否定,我將得到''
這意味着在 boolean 上下文中為false
。 這個對嗎?
有沒有辦法讓它“可見”?
我想知道為什么$x=1;
為!$x
給出''
而不是0
,因為$x=0
為!$x
給出1
。
同樣在這里,我假設每種 TRUE object 如果否定,則給出''
如果否定,每種 FALSE object 給出 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?)
!
(not) 運算符將其參數置於標量上下文中。 標量上下文中的數組返回它的大小——它包含多少元素。 所以在你的情況下,當你這樣做時
!@x
你本質上是在做:
!2
正如您所提到的,這是空字符串,而不是0
。
它不是不可見的,但是您用來顯示它的方法不會顯示它。 例如,您可以使用Data::Dumper
模塊打印它:
use Data::Dumper;
print Dumper !@a;
將打印
$VAR1 = '';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.