Perl,如何小写所有哈希值?

Mar*_*coS 5 perl hash lowercase

我需要将一个(一级)哈希值复制到一个新哈希值,所有值都是小写的.

你知道一个聪明的方法(只是为了避免丑陋的foreach ...... ;-)

fri*_*edo 13

my %new = map { $_ => lc $old{$_} } keys %old;
Run Code Online (Sandbox Code Playgroud)


Kev*_*ock 6

这是一个使用的单线程map:

my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
Run Code Online (Sandbox Code Playgroud)


hob*_*bbs 6

只是为了好玩,一个不同的角度看同样的事情:

my %new_hash;
@new_hash{keys %old_hash} = map lc, values %old_hash;
Run Code Online (Sandbox Code Playgroud)

是的,保证keysvalues函数按相应的顺序生成列表,前提是你不要修改它们在调用一个和另一个之间的哈希值.


TLP*_*TLP 2

本着有趣的精神,这里有一个使用有点晦涩的each函数的解决方案。(别相信我以前用过它。)

$new{$key} = lc $val while ($key,$val) = each %old;
Run Code Online (Sandbox Code Playgroud)