Perl 使用另一个散列的值从散列输出值

Perl 使用另一个散列的值从散列输出值,perl,hash,Perl,Hash,我有两个: my %hash1 = { "GOKIN_0_1" => "alpha", "GOKIN_4_6" => "omega", .... } my %hash2 = { "alpha" => "aaa", "omega" => "bbb", ... } 我想做的是,在一个文件行中打印一个与hash2的key匹配的hash1值,这样一个文件: GOKIN_0_1 aaa GOKIN_4_6 bbb ....

我有两个:

my %hash1 = {
   "GOKIN_0_1" => "alpha",
   "GOKIN_4_6" => "omega",
   ....
}

my %hash2 = {
   "alpha" => "aaa",
   "omega" => "bbb",
   ...
}

我想做的是,在一个文件行中打印一个与hash2的key匹配的hash1值,这样一个文件:

GOKIN_0_1    aaa  
GOKIN_4_6    bbb
....
下面是我的部分代码:

 my $v1 = values %hash1;

 for my $k1 (keys(%hash1)) {
     print OUT "$v1\t$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 "$k\t$hash2{$v}\n";
    }
}
输出:

GOKIN_4_6   bbb
GOKIN_0_1   aaa

首先,散列是用
()
声明的,而不是
{}
声明的。后者表示散列引用

现在,您可以做的是在
%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

首先,您的两个哈希值声明不正确。在需要常规括号的地方有大括号。使用
使用警告打开警告应突出显示该错误

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

首先,您的两个哈希值声明不正确。在需要常规括号的地方有大括号。使用
使用警告打开警告应突出显示该错误

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

请仔细阅读。你发布的代码让回答者白费力气。如果您发布了无法编译/解释的代码,请显式声明。但是,只有当您的问题明确说明不可解释的原因时,这才足够。对于您的问题,您的代码应该是可运行的,即使它几乎只满足您的需要<代码>使用严格;使用警告。请仔细阅读。你发布的代码让回答者白费力气。如果您发布了无法编译/解释的代码,请显式声明。但是,只有当您的问题明确说明不可解释的原因时,这才足够。对于您的问题,您的代码应该是可运行的,即使它几乎只满足您的需要<代码>使用严格;使用警告
。OP希望使用
%hash1
中的值来检查它是否是
%hash2
中的键,并且仅在满足该条件时才打印。你错过了筛选部分。@stevieb筛选要求只是阅读问题的一种方式。另一个是永远都会有match@ysth这个问题在两个方面有点模棱两可:)假设他们的示例代码不进行过滤,并且他们的数据没有不匹配项,很难说过滤是一种实际需求还是一种选择not@ysth如果您认为您知道OP真正想要什么,请随意给出您自己的答案,但问题中没有关于对输出进行排序的内容OP想使用
%hash1
中的值来检查它是否是
%hash2
中的键,并且仅当满足该条件时才打印。你错过了筛选部分。@stevieb筛选要求只是阅读问题的一种方式。另一个是永远都会有match@ysth这个问题在两个方面有点模棱两可:)假设他们的示例代码不进行过滤,并且他们的数据没有不匹配项,很难说过滤是一种实际需求还是一种选择not@ysth如果你认为你知道OP真正想要的是什么,请随意给出你自己的答案,但问题中没有关于输出排序的内容。根据散列排序生成输出几乎从来都不是正确的事情。一个排序的版本怎么样?生成依赖于散列排序的输出几乎从来都不是正确的事情。一个排序的版本怎么样?