我想知道为什么在第二个代码片段中调用map
会导致'undefined value‘错误消失?
use strict;
use warnings;
my $x;
my @a = @{ $x }; # error: Can't use an undefined value as an ARRAY reference
请比较:
use strict;
use warnings;
my $x;
my @a = map $_, @{ $x }; # no error, @a is empty
发布于 2016-10-26 02:45:12
这是由于map()实现别名的方式(本质上是使用for()
循环)。发生的事情是,aref在l值上下文中被使用,因此正在被auto-vivified成存在。
在前面的示例中,您尝试在r值上下文中直接使用aref,这就是它生成错误的原因(因为没有发生自动生动)。
您可以简化使用for()
的测试,并将得到与使用map()
相同的结果
use warnings;
use strict;
my $x;
for (@{ $x }){
print "$_\n";
}
...no输出。
要直观地看到$x
被自动生动地表示为数组引用,您可以使用ref()函数:
my $x;
my @a = map $_, @{ $x };
print ref $x;
输出:
ARRAY
https://stackoverflow.com/questions/40246957
复制相似问题