Perl: сопоставление с первым элементом списков

Задача: построить хэш с использованием карты, где ключи - это элементы данного массива @a, а значения - это первые элементы списка, возвращаемые некоторой функцией f ($ element_of_a):

my @a = (1, 2, 3);
my %h = map {$_ => (f($_))[0]} @a;

Все в порядке, пока f () не вернет пустой список (это абсолютно верно для f (), и в этом случае я бы хотел присвоить undef). Ошибка может быть воспроизведена с помощью следующего кода:

my %h = map {$_ => ()[0]} @a;

сама ошибка звучит как «Нечетное количество элементов в присвоении хэша». Когда я переписываю код так, что:

my @a = (1, 2, 3);
my $s = ()[0];
my %h = map {$_ => $s} @a;

или

my @a = (1, 2, 3);
my %h = map {$_ => undef} @a;

Perl вообще не жалуется.

Итак, как мне решить эту проблему - получить первые элементы списка, возвращаемого f (), когда возвращенный список пуст?

Версия Perl - 5.12.3

Спасибо.

7
задан indexless 20 January 2012 в 18:09
поделиться