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"; }
改めて見直すとなんでこんなことになったんだろ