【发布时间】:2017-03-01 12:53:22
【问题描述】:
当不存在的键分配给变量时,Perl 是否真正自动激活键?
我有这个代码:
my $variable = $self->{database}->{'my_key'}[0];
变量$self->{database}->{'my_key'}[0] 在我的哈希中未定义,但如果我在赋值后打印一个Dumper,我很惊讶my_key 被创建了。
我知道这个案例的功能:
use Data::Dumper;
my $array;
$array->[3] = 'Buster'; # autovivification
print Dumper( $array );
这会给我结果:
$VAR1 = [
undef,
undef,
undef,
'Buster'
];
但从没想过会以相反的方式工作,其中:
my $weird_autovivification = $array->[3];
还会激活$array->[3]。
【问题讨论】:
-
你有什么问题?
-
@Borodin 更新了,我的错。这真的是 Perl 的行为吗?
-
是的,它会创建具有自动激活功能的密钥。
-
@AbhiNickz 甚至在检查?例如。
if ( defined $self->{'unexisting_key'})..'因为那会很伤心.. -
@John Doe,关于“即使在检查时”,仅在尊重时。那 sn-p 取消引用
$self,所以$self我们被自动激活了。
标签: perl autovivification