Perl, как прописать все хеш-значения? - PullRequest
5 голосов
/ 10 августа 2011

Мне нужно скопировать (одноуровневый) хэш в новый со всеми значениями в нижнем регистре.

Знаете ли вы умный метод (просто чтобы избежать уродливого foreach ...; -)

Ответы [ 5 ]

13 голосов
/ 10 августа 2011
my %new = map { $_ => lc $old{$_} } keys %old;
6 голосов
/ 10 августа 2011

Просто для удовольствия, под другим углом взглянуть на одно и то же:

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

И да, функции keys и values гарантируют для создания их списков в соответствующем порядке, при условии, что вы не изменяете хэш, над которым они работают, между вызовами одного и другого. .

6 голосов
/ 10 августа 2011

Это один вкладыш, использующий map:

my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
3 голосов
/ 10 августа 2011

Просто по-другому (теперь это не так круто, когда я знаю, что вам нужна копия хэша).

my %new = %old;
$_ = lc for values %new;
2 голосов
/ 10 августа 2011

В духе веселья, вот решение с использованием несколько неясной функции each.(Не верьте, что я когда-либо использовал это раньше.)

$new{$key} = lc $val while ($key,$val) = each %old;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...