あまり利用する機会は少ないがハッシュのキーをリネームさせたいときがたまにある。
特別複雑なことはしないが、さくっと書けなかったのでメモ。
ex) overwrite_hash_key.pl
use strict; use warnings; my $hash_1 = { apple => 120, banana => 210, pear => 490, grape => 310, }; my $hash_2 = { apple => "りんご", banana => "ばなな", pear => "なし", cherry => "さくらんぼ", }; for my $key (keys %{$hash_1} ) { # 1. hash_1の新しいkeyをhash_2のvalueから取得(無かったらその項目は飛ばす) next unless my $new_key = $hash_2->{$key}; # 2. hash_1に新しいkeyで挿入 $hash_1->{$new_key} = $hash_1->{$key}; # 3. hash_1のいらなくなった方を削除 delete $hash_1->{$key}; } while (my ($key, $value) = each( %{$hash_1} )) { print "名前:" .$key . " 値段:" ,$value . "\n"; };
【出力結果】
> $ perl overwrite_hash_key.pl 名前:りんご 値段:120 名前:ばなな 値段:210 名前:なし 値段:490 名前:grape 値段:310 <- hash_2には"ぶどう"は設定されていないので更新されない