为什么会$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.