Arrays 在perl中从两个HOA生成HOH

Arrays 在perl中从两个HOA生成HOH,arrays,perl,hash,multidimensional-array,push,Arrays,Perl,Hash,Multidimensional Array,Push,我有差异表达(DE)基因的基因序列信息,转录组序列数据(所有表达的基因)包含在两个数组的散列中。两个散列都有一个唯一的基因ID作为键(例如“XLOC_uU000001”) 我已经编写了一个程序,使用DE基因HoA中的键,循环遍历tanscriptomic HoA,从而只给我DE基因的基因序列 HOA草签如下: my %hash; push @{ $hash{ $firstkey[$_] } }, [ $p_value[$_], $q_value[$_], $log_fold_change[$_]

我有差异表达(DE)基因的基因序列信息,转录组序列数据(所有表达的基因)包含在两个数组的散列中。两个散列都有一个唯一的基因ID作为键(例如“XLOC_uU000001”)

我已经编写了一个程序,使用DE基因HoA中的键,循环遍历tanscriptomic HoA,从而只给我DE基因的基因序列

HOA草签如下:

my %hash;
push @{ $hash{ $firstkey[$_] } }, [ $p_value[$_], $q_value[$_], $log_fold_change[$_] ] for 0 .. $#firstkey;

my %hash2;
push @{ $hash2{ $secondkey[$_] } }, [ $transcriptID[$_], $sequence[$_] ] for 0 .. $#secondkey;
然后,我使用第一个散列中的键从第二个散列中提取值(两个散列的键的格式相同)

这个很好用。我现在要做的是在输出中包含来自第一个HoA的一些附加信息(P/Q值和关于表达式更改级别的信息)。 我的问题是:如何在输出中包含来自第一个散列的值?我希望打印出:

%hash2{$firstkey} => $sequence[$_], $p_value[$_], $q_value[$_], $log_fold_change[$_] 
我不知道是应该将数组的第二个散列推到第一个散列上(如果是这样的话,怎么做?!)还是在最后循环两个散列

--------更新---------

每个HoA的示例:

一键:

Key 'XLOC_001155' contains the values: [ TCONS_00001774 Scaffold10052 SEchx 0 SEchxdex 3.51656 inf 0.00345 0.803695 ] 
Key 'XLOC_001173' contains the values: [ TCONS_00001795 Scaffold10222 SEchx 26.3355 SEchxdex 70.1758 1.41397 0.0199 0.998513 ] 
Key 'XLOC_001177' contains the values: [ TCONS_00001799 Scaffold10227 SEchx 26.2873 SEchxdex 0 -inf 0.01285 0.998513 ] 
Key 'XLOC_001195' contains the values: [ TCONS_00001826 Scaffold10227 SEchx 0.0580138 SEchxdex 0.688545 3.56908 0.0398 0.998513 ] 
Key 'XLOC_000001' contains the values: [ TCONS_00000001 Scaffold10262 SEchx 0 SEchxdex 2.01554 inf 0.00615 0.998513 ] 
Key 'XLOC_001290' contains the values: [ TCONS_00001955 Scaffold103603 SEchx 0 SEchxdex 0.732931 inf 0.0139 0.998513 ] 
Key 'XLOC_001308' contains the values: [ TCONS_00001973 Scaffold1001 SEchx 0 SEchxdex 1.11927 inf 0.00295 0.763416 ] 
Key 'XLOC_000002' contains the values: [ TCONS_00000002 Scaffold10052 SEchx 0.0923385 SEchxdex 23.4041 7.98561 0.02025 0.998513 ]
第二个关键点:

Key 'XLOC_000001' contains the values: [ TCONS_00000001 ATTACAATAACTAAGGAGGACATAGCTTAATTTGCACTATTTACTTTAGTGCATCTGTTGTAGTAGGACGTACAAGGACTTTATTGCTTCAGATAAAGACATTTTATTGCTTTCAAGGTATTCCTGAGACAATTGATCGTGCACTGCAAGCTCCACTTCTAAGTATAAACCAGAGGATTGCAAAACTGGAAGCAGTTCTTAGTTTGACTGGACAATTGTATCAAGTAGGAGGAAAAATGTTTGCCACTAATGGGGAGCAAGTTGATTTTGAGGCCTCTAAACTGACCTGTGAAAAGGCTGGTGGACGAATTGCTACTCCAAAGAATGAAGCAGAGAACAATGTTGTGCTAAGTATTTTAAAGAAACACAATAAATATGCATACCTAGGTGTTACAG ] 

Key 'XLOC_000002' contains the values: [ TCONS_00000002 GTCACACGGCCAGCATCACGCGTGTCACGCTTTTATCCGGAATGAGACCAACTCCAACTTTTTGTGACTGACTTATTTTTCTTCTAGTATAAAAAAATGTCTCGCAGCCACGAGAGACTTCAACGCCTATAACCACCGGCGTACCTCAAAACAAGCAGATAATACCGCGCTAAGCAGCGTTCGGGTTTATAGGCGGGCATAGCCTCACTTCCGGCAGGCTGCTAGGAAACCAAAGAGACGCGGATTCTGATGTTTTGAGCTGCGAGGGTGAAGCGACTGCAAGGACAACAATGGATTCTGAATACATAAAGCGCTGTTTAGGGAAGTGTTTGTCCGAAGGACTTGCAGAAGTCGCGGAAAAAAGACCGATGGATCCTATTGAGT ] 


要打印键同时存在于
%hash
%hash2
中的所有值,请使用条件,然后取消对arrayrefs的引用

for my $firstkey (sort keys %hash) {
    if ($hash2{$firstkey}) {
        my @values = (@{ $hash{$firstkey} }, @{ $hash2{$firstkey} });
        #my @values = map @{ $_->{$firstkey} }, \(%hash, %hash2);

        print join("\n", @values), "\n";
    }
}
我已经解决了:

for my $firstkey (sort keys %hash) {
    for my $part (@{ $hash2{$firstkey} } ) {
        my ($value3, $value4) = @$part;
        print $output "$firstkey ";
        for my $values (@{$hash{$firstkey} } ) {
            my ($value1, $value2) = @$values;
            print $output "$value1, $value2\n";
        }
            print $output "$value4\n";
    }
}

你能发布一个
@firstkey
@secondkey
@value1
@value2
等的样本吗。?此外,没有“哈希数组”,只有数组的哈希和数组的数组。第一个HoA的密钥包含第二个HoA密钥的子集。第二个HoA包含基因序列。我想包括从第一个HoA到第二个HoA中包含的序列的所有信息。第一个HoA的密钥包含第二个HoA密钥的子集。第二个HoA包含基因序列。我想包括从第一个HoA到第二个HoA中包含的序列的所有信息尼克3小时前
for my $firstkey (sort keys %hash) {
    for my $part (@{ $hash2{$firstkey} } ) {
        my ($value3, $value4) = @$part;
        print $output "$firstkey ";
        for my $values (@{$hash{$firstkey} } ) {
            my ($value1, $value2) = @$values;
            print $output "$value1, $value2\n";
        }
            print $output "$value4\n";
    }
}