我想以某种方式循环两个哈希,以便如果哈希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);
}
}
答案 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
}
}