1

ハッシュ構造があり、既存の値に新しい値を追加したい (新しい値で更新しない)。
これが私のコードです。

use strict;
    use warnings;
    my %hash;
    while(<DATA>){
        my $line=$_;
        my ($ID)=$line=~/ID=(.*?);/;
        #make a hash with ID as key                                                                                                                                                                                                                                                                                                                                             
        if (!exists $hash{$ID}){
            $hash{$ID}= $line;
        }
        else{
           #add $line to the existing value                                                                                                                                                                                                                                                                                                                                     
        }
    }
    for my $key(keys %hash){
        print $key.":".$hash{$key}."\n";
    }
    __DATA__
    ID=13_76; gi|386755343
    ID=13_75; gi|383750074
    ID=13_75; gi|208434224
    ID=13_76; gi|410023515
    ID=13_77; gi|499086767
4

3 に答える 3

1

必要なのは$hash{$ID} .= $line;. if-else はありません。$IDハッシュにキーがない場合は、キーが作成$lineされて空の文字列に連結され、必要なものが正確に得られます。

于 2016-11-20T10:57:19.427 に答える
1
    else{
       $hash{$ID} .= $line;                                                                                                                                                                                                                                                                                                                                  
    }
于 2013-07-16T09:53:53.410 に答える