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



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

#!/usr/bin/perl
sub get_undef() {
return undef;
}
my $test1 = get_undef;
my @test2 = get_undef;
print "1n" unless ($test1);
print "2n" unless (@test2);

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

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

如果您希望$test未定义而@test2为空,则可以从 sub 中return;

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

Perl 让你有一个包含单个值 undef 的列表。它可以与任何其他值一样有意义,尽管您必须决定您希望它在上下文中的含义。

在标量上下文中,数组的值是该数组中的元素数。请注意,这与"标量上下文中的列表"的想法不同,后者不是一回事。数组是保存列表并具有自己行为的容器。例如,您可以shift数组,但不能列表。

如果要检查数组是否至少有一个定义的值,可以使用grep

if( grep { defined } @array ) { ... }

最新更新