5

(1レベルの)ハッシュをすべて小文字の新しいハッシュにコピーする必要があります。

スマートな方法を知っていますか(醜いforeachを避けるためだけに...;-)

4

5 に答える 5

13
my %new = map { $_ => lc $old{$_} } keys %old;
于 2011-08-10T16:21:25.613 に答える
6

これは、次を使用したワンライナーmapです。

my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
于 2011-08-10T16:21:39.423 に答える
6

楽しみのために、同じものを別の角度から見てみましょう。

my %new_hash;
@new_hash{keys %old_hash} = map lc, values %old_hash;

そして、関数keysvalues関数は、対応する順序でリストを生成することが保証されています。

于 2011-08-10T16:35:55.003 に答える
3

ちょうど別の方法 (ハッシュのコピーが必要であることはわかっているので、それほどクールではありません)。

my %new = %old;
$_ = lc for values %new;
于 2011-08-10T18:34:59.673 に答える
2

楽しみの精神で、ややあいまいなeach関数を使用したソリューションを次に示します。(私が以前にそれを使用したことがあるとは思わないでください。)

$new{$key} = lc $val while ($key,$val) = each %old;
于 2011-08-10T18:05:41.883 に答える