我有以下perl脚本,它将一些细节存储在哈希中.在填充哈希中的一些条目之后,我将打印产生以下输出的哈希内容
Key:4:Name4 Value:Name4 Key:3:Name3 Value:Name3 Key:2:Name2 Value:Name2 Key:1:Name1 Value:Name1 Key:0:Name0 Value:Name0
之后我尝试搜索哈希中不存在的嘿(我的$nm = $components {’11:Name11′} {‘name’});
在此检查之后如果我打印哈希的内容,我看到上面的键(即’11:Name11′)被添加到哈希(下面突出显示).有人能解释一下这种行为吗?
Key:4:Name4 Value:Name4 Key:3:Name3 Value:Name3 **Key:11:Name11 Value:** Key:2:Name2 Value:Name2 Key:1:Name1 Value:Name1 Key:0:Name0 Value:Name0
my %components ; for ($i=0;$i<5;$i++) { my $hash = {} ; my $vr = $i+100; $hash->{'container'} = $i ; $hash->{'name'} = 'Name'.$i; $hash->{'version'} = $vr ; my $tmpCompName = $hash->{'container'}.':'.$hash->{'name'}; $components{$tmpCompName} = $hash ; } while (my ($k,$v)=each %components){ print "Key:".$k." Value:".$v->{'name'}."\n"; } my $tmp = '11:Name11'; my $nm = $components{$tmp}{'name'} ; print "Name:".$nm."\n"; print "After check\n"; while (my ($k,$v)=each %components){ print "Key:".$k." Value:".$v->{'name'}."\n" }
提前致谢.
解决方法
这称为
autovivification. Perl的一个功能允许您使用之前未声明或初始化的哈希元素.只要未定义的值(如$components {’11:Name11′})被解除引用(当Perl尝试评估$components {’11:Name11′} {‘name’})时就会发生这种情况.
有一个autovivification
编译指示,您可以不使用它来禁用此行为.
{ no autovivification; if ($hash{"non-existent-key"}{"foo"}) { # won't create $hash{"non-existent-key"} ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。