为什么 Perl 在布尔上下文中将具有单个 undef 值的数组评估为 true?

nE0*_*ghT 1 arrays perl if-statement undefined

为什么这段代码不打印“2”?

#!/usr/bin/perl

sub get_undef() {
        return undef;
}

my $test1 = get_undef;
my @test2 = get_undef;

print "1\n" unless ($test1);
print "2\n" unless (@test2);
Run Code Online (Sandbox Code Playgroud)

Jim*_*vis 10

您的@test2数组包含一个值 ( undef)。

条件将数组置于标量上下文中,从而得出数组的大小 (1)。

如果你想$test是未定义的和@test2空的,你可以return;从你的子。


Tim*_*and 6

该数组@test2有一个元素:undef。在标量上下文中,此数组不为空,因此计算结果为 true。