以下代码按预期崩溃,因为$x不保存数组引用:
$ perl -E 'use strict; use warnings; my $x; say @{$x}; say "OK";'
Can't use an undefined value as an ARRAY reference at -e line 1.
Run Code Online (Sandbox Code Playgroud)
但是,此代码可以在没有任何警告的情况下工作:
perl -E 'use strict; use warnings; my $x; say for @{$x}; say "OK";'
OK
Run Code Online (Sandbox Code Playgroud)
为什么?我在 perldoc 中没有找到任何关于这种行为的文档。看起来for上下文在这里暗示了一些 DWIM-ness 逻辑(具有危险的后果)。
希望这有点启发:
$ perl -E 'use strict; use warnings; my $x; say for @{$x}; say $x;'
ARRAY(0x561b92479420)
Run Code Online (Sandbox Code Playgroud)
的$x变量是由autovivified for。
与之比较:
$ perl -E 'use strict; use warnings; my $x; $x->[0]; say $x;'
Useless use of array element in void context at -e line 1.
ARRAY(0x561b92479420)
Run Code Online (Sandbox Code Playgroud)
对未定义标量的某些引用操作会导致自动激活。for @{$var}显然是其中之一。CPAN 上有一个自动激活模块,可以让您更好地控制自动激活发生的时间。
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |