为什么会$a变成arrayref?我没有向它推任何东西。
perl -MData::Dumper -e 'use strict; 1 for @$a; print Dumper $a'
$VAR1 = [];
为什么会$a变成arrayref?我没有向它推任何东西。
perl -MData::Dumper -e 'use strict; 1 for @$a; print Dumper $a'
$VAR1 = [];
这是因为for循环将 的内容@$a视为左值 - 您可以分配给它的东西。请记住,for将数组的内容别名为$_. 似乎在 , 中查找可别名内容的行为@$a足以导致自动激活,即使没有要别名的内容。
这种混叠效果也是一致的。以下也会导致自动存活:
map {stuff} @$a;grep {stuff} @$a;a_subroutine( @$a);如果你想管理自动激活,你可以使用同名的 pragma来实现词法控制。
当您将值为 undef 的标量变量视为任何类型的引用时,Perl 将该值作为您尝试使用的引用类型。在这种情况下,$a具有值 undef,并且当您使用 时@$a,它必须自动激活数组引用,$a以便您可以将其取消引用为数组引用。
$a由于 Perl 的自动生存功能,它成为一个 ARRAY 引用。
$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.