используйте List :: Util , чтобы уменьшить функцию для создания хэш-ссылки в обратном направлении, создавая хэш-значение, которое становится значением верхнего хеш-значения, начиная с $value
, которое остается значением, а не ключом.,Это устраняет необходимость в деструктивных операциях, таких как pop
:
my $d = reduce { +{ $b => $a } } ($value, reverse @data);
. Возможно, вам придется подавить предупреждения 'Name "main::b" used only once: possible typo at '
, заключив код в блок и временно отключив предупреждение 'once'
в этом блоке.с
no warnings 'once';
вот так:
use strict;
use warnings;
use List::Util 'reduce';
my @data = qw{one two three};
my $value = 13;
my $d = do {
no warnings 'once';
reduce { +{ $b => $a } } ($value, reverse @data);
};