使用来自另一个哈希perl的值从哈希输出值

时间:2017-07-21 12:45:28

标签: perl hash

我有两个哈希:

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";
 }

非常感谢你。

2 个答案:

答案 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";
}