黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

Perlのハッシュに要素を追加する時にハマった話

Perlのハッシュ

Perlのハッシュは以下のようにデータを格納できます。

%hash = (
    hoge => "hoge",
    fuga => "fuga",
);

リファレンスにするとこんな感じ。

$hash = {
    hoge => "hoge",
    fuga => "fuga",
};

アクセスする時は$hash{hoge}だったり$hash->{fuga}でアクセスできます。


ハマった

なんでそんなことでハマってたの?馬鹿なの?と今では思いますが、簡単なスクリプトを作成しているときに、

my %hash;
my @list = qw/ a b c d e /;
for my $tmp (@list) {
    %hash = (
        $tmp => "hogeee";
    );
}

@listに格納されている値で%hashのkeyを作ってごにょごにょしようとしてたのですが、printしてみるとe hogeeeとしか表示されません。

ん??a-bどこいった?と悩んでました。

で、よく考えるとforで繰り返す度に%hashを上書きしてしまっているんですね。アホかと。

ハッシュに要素を追加する時は以下のようにしましょうという教訓を得ました。

my %hash;
my @list = qw/ a b c d e /;
for my $tmp (@list) {
    $hash{$tmp} = "hogeee";
}

改めて見直すとなんでこんなことになったんだろ