Задача: построить хэш с использованием карты, где ключи - это элементы данного массива @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
Спасибо.