我需要将(一级)哈希复制到一个新哈希值,所有值都是小写的。
你知道一个聪明的方法(只是为了避免丑陋的 foreach ...; - )
答案 0 :(得分:13)
my %new = map { $_ => lc $old{$_} } keys %old;
答案 1 :(得分:6)
这是使用map
my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
答案 2 :(得分:6)
只是为了好玩,从另一个角度来看待同样的事情:
my %new_hash;
@new_hash{keys %old_hash} = map lc, values %old_hash;
是的,keys
和values
函数是guaranteed以相应的顺序生成列表,前提是您不修改他们在调用一个和另一个。
答案 3 :(得分:3)
只是另一种方式(现在我不知道你想要哈希的副本,这不是很酷)。
my %new = %old;
$_ = lc for values %new;
答案 4 :(得分:2)
本着乐趣的精神,这里有一个使用有点模糊的each
函数的解决方案。 (不要相信我曾经用过它。)
$new{$key} = lc $val while ($key,$val) = each %old;