我有两个哈希:
my %hash1 = {
"GOKIN_0_1" => "alpha",
"GOKIN_4_6" => "omega",
....
}
my %hash2 = {
"alpha" => "aaa",
"omega" => "bbb",
...
}
我想做的是,在文件行中打印一个与 hash2 键匹配的 hash1 值,以获得这样的文件:
GOKIN_0_1 aaa
GOKIN_4_6 bbb
....
这是我的代码部分:
my $v1 = values %hash1;
for my $k1 (keys(%hash1)) {
print OUT "$v1t$hash2{$k1}n";
}
非常感谢。
首先,哈希是用()
声明的,而不是{}
。后者表示哈希引用。
现在,您可以做的是遍历%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 "$kt$hash2{$v}n";
}
}
输出:
GOKIN_4_6 bbb
GOKIN_0_1 aaa
所以首先,你的两个哈希值被错误地声明了。您需要常规括号的地方有大括号。打开带有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 "$k1t$hash2{$hash1{$k1}}n";
}