То же, что и решение Vijayender, но будет работать со смешанными массивами, содержащими arrayrefs и scalar.
$ref = [[1,2,3,4],[5,6,7,8],9,10];
@a = map { ref $_ eq "ARRAY" ? @$_ : $_ } @$ref;
print "@a"
Конечно, вы можете расширить его, чтобы также разыменовывать hashrefs:
@a = map { ref $_ eq "ARRAY" ? @$_ : ref $_ eq "HASH" ? %$_: $_ } $@ref;
или использовать grepчтобы отсеять мусор:
@a = map { @$_} grep { ref $_ eq 'ARRAY' } @$ref;
Начиная с List :: MoreUtils 0.426 у нас есть функция arrayify , которая рекурсивно сглаживает массивы:
@a = (1, [[2], 3], 4, [5], 6, [7], 8, 9);
@l = arrayify @a; # returns 1, 2, 3, 4, 5, 6, 7, 8, 9
Она была представлена ранеено был сломан.