Perl:循环两个哈希

时间:2017-02-08 13:54:49

标签: perl

我想以某种方式循环两个哈希,以便如果哈希A的键等于哈希B的值,那么做一些事情:

例如

my $hash1 = {
    'STRING_ID1' => {default => 'Some string'},
    'STRING_ID3' => {default => 'Some string'},
    'STRING_ID5' => {default => 'Some string'},
    'STRING_ID7' => {default => 'Some string'},
};

my $hash2 = {
    content => 'STRING_ID',
    content1 => 'Some text that doesn't equal an ID',
    content2 => 'STRING_ID_5',
    content3 => 'STRING_ID_8',
};

如果这些值相等,那么我想调用一个获取本地化字符串的服务。

我能想到的唯一方法是:

while (($key, $value) = each (%hash1, %hash2)) {
    if ($key eq $value) {

        $service->getLocalizedString($key);

    }
}

2 个答案:

答案 0 :(得分:4)

由于它们是哈希值,因此您不需要使用循环来按键执行查找。

while (my ($key2,$value2) = each %$hash2) {
    if (exists $hash1->{$value2}) {
        print "($key2,$value2) from \$hash2 ";
        print "matches ($value2,$hash1->{$value2}) from \$hash1\n";
    }
}

答案 1 :(得分:1)

据我了解这个问题,您想检查%hash1是否包含带有字符串替换的元素,对于%hash2中的值中列出的标识符?

while (my ($key,$value) = each(%$hash2)) {
    # check if we have an entry in $hash1
    if (exists $hash1->{$value}) {     
         # call service with the STRING_ID as argument
         $service->getLocalizedString($value);
    } else {
         # nothing found
    }
}