簡體   English   中英

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: 

我想如果我對非空數組或標量進行否定,我將得到''這意味着在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM