为什么$a
会成为arrayref?我不是在推动它。
perl -MData::Dumper -e 'use strict; 1 for @$a; print Dumper $a'
$VAR1 = [];
答案 0 :(得分:8)
这是因为for
循环将@$a
的内容视为左值 - 您可以分配给它。请记住,for
将数组的内容别名为$_
。似乎在@$a
中查找可混淆内容的行为足以导致自动更新,即使没有别名内容也是如此。
这种混叠效果也是一致的。以下内容也导致自动化:
map {stuff} @$a;
grep {stuff} @$a;
a_subroutine( @$a);
如果您想管理自动审核,可以使用the eponymous pragma来实现词汇控制。
答案 1 :(得分:3)
当您将值为undef的标量变量视为任何类型的引用时,Perl会将该值设置为您尝试使用的引用类型。在这种情况下,$a
的值为undef,当您使用@$a
时,它必须在$a
中对数组引用进行自动生成,以便您可以将其取消引用为数组引用。
答案 2 :(得分:0)
$a
成为ARRAY参考。
答案 3 :(得分:0)
$ a和$ b是Perl中的特殊变量(用于排序),并且具有自己的特殊范围。
perl -MData::Dumper -e 'use strict; 1 for @$c; print Dumper $c'
生成
Global symbol "$c" requires explicit package name at -e line 1.
Global symbol "$c" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.