在foreach中将undef变量提升为ARRAY ref

时间:2019-06-26 15:57:44

标签: perl

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。这是怎么回事?

1 个答案:

答案 0 :(得分:4)

自生自灭

@$x

等同于

@{ $x //= [] }

在左值上下文中。

使用

if ($x) {
   for (@$x) {
      ...
   }
}