加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中的Hash如果不存在则添加密钥

发布时间:2020-12-16 06:06:04 所属栏目:大数据 来源:网络整理
导读:我有以下perl脚本,它将一些细节存储在哈希中.在填充哈希中的一些条目之后,我将打印产生以下输出的哈希内容 Key:4:Name4 Value:Name4Key:3:Name3 Value:Name3Key:2:Name2 Value:Name2Key:1:Name1 Value:Name1Key:0:Name0 Value:Name0 之后我尝试搜索哈希中不
我有以下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 checkn";

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"}
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读