2014-04-28 43 views
1

我不明白下面的代码片段:如何测试数组的null值?

perl -e ' 
my @test = undef; 
if(@test) {print "Full\n";}' 
Full 

看来,@test虽然它被分配undef它实际上有1元是undef
那么测试@test为空的正确方法是什么?
if(scalar(@test) == 1 && !$test[0])似乎不可思议我

+3

你可能想在这里看我的解释:http://perlmaven.com/undef-on-perl-arrays-and-哈希 – szabgab

回答

10

初始化一个@array到没什么,只是做:

my @test =(); 

目前你正在做的:

my @test = (undef); 

哪像你正在观察,是为阵列分配一个值。

要清除已经声明数组,你可以使用undef像这样:

undef @test; 
+0

我认为这是我们如何初始化哈希 – Jim

+0

哈希和数组都用列表进行初始化,是的。哈希只是希望该列表包含键/值对 – Miller

+1

若要清除现有数组(或散列),最好为其分配一个空列表,如'@test =()'和'%test =()'。使用'undef @ test'还会将分配给数组的内存释放回Perl的池中,这通常是低效的并且是不希望的。 – Borodin