(1レベルの)ハッシュをすべて小文字の新しいハッシュにコピーする必要があります。
スマートな方法を知っていますか(醜いforeachを避けるためだけに...;-)
my %new = map { $_ => lc $old{$_} } keys %old;
これは、次を使用したワンライナーmap
です。
my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
楽しみのために、同じものを別の角度から見てみましょう。
my %new_hash;
@new_hash{keys %old_hash} = map lc, values %old_hash;
そして、関数keys
とvalues
関数は、対応する順序でリストを生成することが保証されています。
ちょうど別の方法 (ハッシュのコピーが必要であることはわかっているので、それほどクールではありません)。
my %new = %old;
$_ = lc for values %new;
楽しみの精神で、ややあいまいなeach
関数を使用したソリューションを次に示します。(私が以前にそれを使用したことがあるとは思わないでください。)
$new{$key} = lc $val while ($key,$val) = each %old;