use strict;
use warnings FATAL => 'all';
my $x = undef;
if (@$x) { print "ok\n" }
else { print "no\n" }
可预测地为if (@$x)
产生“不能使用未定义的值作为ARRAY引用” 。但是插入foreach (@$x)
:
use strict;
use warnings FATAL => 'all';
my $x = undef;
foreach (@$x) { print $_ } # <-------
if (@$x) { print "ok\n" }
else { print "no\n" }
print ref($x)."\n";
输出:
no
ARRAY
foreach
行似乎已分配给$x
。这是怎么回事?
答案 0 :(得分:4)
自生自灭
@$x
等同于
@{ $x //= [] }
在左值上下文中。
使用
if ($x) {
for (@$x) {
...
}
}