i наконец заметили, что ваш сплат определен до , любое значение присваивается $ Attachment. [ blush ] означает, что в значке сплат НЕ будет ничего с этим параметром.
исправление = переместить знак в стандартное местоположение - непосредственно перед вызовом, который его использует - и, следовательно, после присвоения всех $ Vars, которые он использует , [ ухмылка ]
Прокрутка Ваше собственное не является слишком болезненной.
use List::Util qw(max);
@A = ([1, 2], [3, 4]);
@B = ([5, 6], [7, 8]);
@C = ([9, 10], [11, 12]);
@D = ([13, 14], [15, 16]);
sub hmerge(\@\@;\@\@\@\@\@\@) {
my @ret;
for my $i (0 .. max map $#$_, @_) {
push @ret, [map @{$$_[$i]}, @_];
}
@ret;
}
@E = (hmerge(@A, @B), hmerge(@C, @D));
Править
Я неправильно понял OP, думая, что они хотели выполнить итерации по всем возможным перестановкам нескольких матриц (который является что Итератор:: Массив:: Зубчатый делает).
Смотрите на Итератор:: Массив:: Зубчатый
Вот пример из резюме:
use Iterator::Array::Jagged;
# Build up a set of data:
my @data = (
[qw/ a b /],
[qw/ c d /],
[qw/ e f g /]
);
# Iterator is a subref:
my $itersub = Iterator::Array::Jagged->get_iterator( @data );
while( my @set = $itersub->() )
{
print "Next set: '" . join("&", @set) . "'\n";
}# end while()
Пример в коде выше кода печатает следующее:
Next set: 'a&c&e'
Next set: 'b&c&e'
Next set: 'a&d&e'
Next set: 'b&d&e'
Next set: 'a&c&f'
Next set: 'b&c&f'
Next set: 'a&d&f'
Next set: 'b&d&f'
Next set: 'a&c&g'
Next set: 'b&c&g'
Next set: 'a&d&g'
Next set: 'b&d&g'