使用'exists'进行额外的哈希查找?

Fra*_*ank 5 lookup perl hash performance exists

我有时会访问这样的哈希:

if(exists $ids{$name}){
    $id = $ids{$name};
}
Run Code Online (Sandbox Code Playgroud)

那是好习惯吗?我有点担心它包含两个查找,其中一个应该完成.有没有更好的方法来检查存在并分配值?

Sin*_*nür 10

通过检查exists,您可以防止自动更新.请参阅Autovivification:它是什么以及我为什么关心?.

更新:正如trendels指出的那样,在您发布的示例中,自动更新不起作用.我假设实际代码涉及多级哈希.

这是一个例子:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my (%hash, $x);

if ( exists $hash{test}->{vivify} ) {
    $x = $hash{test}->{vivify}->{now};
}

print Dumper \%hash;

$x = $hash{test}->{vivify}->{now};

print Dumper \%hash;

__END__


C:\Temp> t
$VAR1 = {
    'test' => {}
};
$VAR1 = {
    'test' => {
        'vivify' => {}
    }
};
Run Code Online (Sandbox Code Playgroud)