我需要将一个(一级)散列复制到一个新的散列,所有值都小写。
你知道一个聪明的方法(只是为了避免丑陋的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
andvalues
函数保证以相应的顺序生成它们的列表,前提是您在调用一个和另一个之间不修改它们正在处理的哈希。
只是另一种方式(现在我知道你想要哈希的副本,这并不酷)。
my %new = %old;
$_ = lc for values %new;
本着有趣的精神,这里有一个使用有点晦涩的each
功能的解决方案。(不要相信我以前用过它。)
$new{$key} = lc $val while ($key,$val) = each %old;