我想知道为什么要打电话给map
第二个片段中的“未定义值”错误消失了吗?
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
这是由于这样的方式map() http://perldoc.perl.org/functions/map.html做别名(它本质上是使用for()
环形)。发生的情况是 aref 正在左值上下文中使用,因此正在被自动生动化 https://www.effectiveperlprogramming.com/2011/04/understand-autovivification/存在。
在前面的示例中,您尝试直接在右值上下文中使用 aref,这就是它生成错误的原因(因为没有发生自动激活)。
您可以简化您的测试以使用for()
,你会得到与以下相同的结果map()
:
use warnings;
use strict;
my $x;
for (@{ $x }){
print "$_\n";
}
...没有输出。
直观地看到$x
被自动激活为数组引用,您可以使用ref() http://perldoc.perl.org/functions/ref.html功能:
my $x;
my @a = map $_, @{ $x };
print ref $x;
Output:
ARRAY
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)