Задача: построить хэш с помощью карты, где ключи — это элементы заданного массива @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;
or
my @a = (1, 2, 3);
my %h = map {$_ => undef} @a;
Perl вообще не жалуется.
Итак, как мне решить эту проблему — получить первые элементы списка, возвращаемого функцией f(), когда возвращаемый список пуст?
Версия Perl — 5.12.3.
Спасибо.
f
так, чтобы, когда он возвращает пустой список, вы вводилиundef
или иначе первый элемент возвращаемого списка. - person Jonathan Leffler   schedule 20.01.2012