我想知道为什么在第二个片段中调用映射使得’未定义的值’错误消失了?
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()做了别名的方式(它本质上是使用for()循环).正在发生的事情是,在l值上下文中使用了isf,因此正在使用
auto-vivified.
在你的前一个例子中,你正在尝试直接在r值上下文中使用aref,这就是为什么它会生成错误(因为没有自动生成).
您可以简化对()的使用测试,您将得到与map()相同的结果:
use warnings; use strict; my $x; for (@{ $x }){ print "$_\n"; }
…没有输出.
为了在视觉上看到$x被自动生成为数组引用,可以使用ref()函数:
my $x; my @a = map $_,@{ $x }; print ref $x;
输出:
ARRAY
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。