【发布时间】:2016-05-03 21:58:56
【问题描述】:
这是我在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.
我最困惑的是为什么第一个 sn-p 不会给出取消引用错误。当我使用Data::Dumper 时,很明显在第一个sn-p 中$d->{cd} 被自动激活为{}。
为什么keys 需要自动激活?我尝试阅读perldoc,但找不到令人满意的答案。 keys 没有设置别名($_ 等),所以 perl 不需要认为 $d->{cd} 需要在左值上下文中,是吗? (我知道表达式是否需要在左值上下文中自动激活发生,如here 所述。
一个相关的post。
【问题讨论】:
标签: perl hash key dereference autovivification