这是我发现的一个微妙之处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所述。
一个相关的帖子。