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
进行了赋值。这是怎么回事?
最佳答案
自动生成
@$x
相当于
@{ $x //= [] }
在左值上下文中。
使用
if ($x) {
for (@$x) {
...
}
}
关于perl - 在 foreach 中将 undef 变量提升为 ARRAY ref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776861/