我有两个哈希:
my %hash1 = {
"GOKIN_0_1" => "alpha",
"GOKIN_4_6" => "omega",
....
}
my %hash2 = {
"alpha" => "aaa",
"omega" => "bbb",
...
}
我想要做的是,在文件中打印hash1的值,该值与hash2的键匹配,以得到类似的文件:
GOKIN_0_1 aaa
GOKIN_4_6 bbb
....
这是我的代码的一部分:
my $v1 = values %hash1;
for my $k1 (keys(%hash1)) {
print OUT "$v1\t$hash2{$k1}\n";
}
非常感谢你。
答案 0 :(得分:2)
首先,哈希声明为()
,而不是{}
。后者表示哈希引用。
现在,您可以做的是循环%hash1
的键和值,检查值是否在%hash2
中作为键,然后如果值确实存在,则打印所需的变量键:
use warnings;
use strict;
my %hash1 = (
"GOKIN_0_1" => "alpha",
"GOKIN_4_6" => "omega",
"GOKIN_4_9" => "blah",
);
my %hash2 = (
"alpha" => "aaa",
"omega" => "bbb",
);
while (my ($k, $v) = each %hash1){
if (exists $hash2{$v}){
print "$k\t$hash2{$v}\n";
}
}
输出:
GOKIN_4_6 bbb
GOKIN_0_1 aaa
答案 1 :(得分:0)
首先,你的两个哈希声明不正确。你有大括号,你需要常规括号。使用use warnings;
启用警告应突出显示该错误。
my %hash1 = (
"GOKIN_0_1" => "alpha",
"GOKIN_4_6" => "omega",
);
my %hash2 = (
"alpha" => "aaa",
"omega" => "bbb",
);
一旦你有两个哈希值,你就可以使用一个值$hash1{$k1}
- 作为第二个值的关键点,将键$k1
链接到第二个哈希值。
for my $k1 (keys(%hash1)) {
print OUT "$k1\t$hash2{$hash1{$k1}}\n";
}