为什么这段代码不打印"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 ) { ... }