这是我发现的一个微妙之处keys()。
$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my @e = keys(%{$d->{cd}});'
$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my %e = %{$d->{cd}};'
Can't use an undefined value as a HASH reference at -e line 1.
我最困惑的是为什么第一个片段不会给出取消引用错误。当我使用Data::Dumper时,很明显在第一个片段中,$d->{cd}, 被自动激活为{}。
为什么keys需要自动激活?我尝试阅读perldoc它,找不到令人满意的答案。keys没有设置别名($_等),所以 perl 不需要认为$d->{cd}需要在左值上下文中,是吗?(我了解表达式是否需要在左值上下文中自动激活发生,如here所述。
一个相关的帖子。