我有以下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
Run Code Online (Sandbox Code Playgroud)
之后我尝试搜索哈希中不存在的嘿(我的$ 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
Run Code Online (Sandbox Code Playgroud)
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"
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
这称为自动更新.Perl的一个功能是允许您使用之前未声明或初始化的哈希元素.每当$components{'11:Name11'}
取消引用未定义的值(如)时(在Perl尝试评估时发生),就会发生这种情况$components{'11:Name11'}{'name'}
.
有一个autovivification
pragma,您可以不使用它来禁用此行为.
{
no autovivification;
if ($hash{"non-existent-key"}{"foo"}) { # won't create $hash{"non-existent-key"}
...
}
Run Code Online (Sandbox Code Playgroud)