He escrito el módulo List::Gen en CPAN que proporciona una forma alternativa de hacer esto:
use List::Gen qw/by/;
my @array = qw/zero one two three four five six/;
my @slice = map {$$_[0]} by 2 => @array;
by
particiones @array
en grupos de dos elementos y devuelve una matriz de referencias de matriz. map
luego obtiene esta lista, por lo que cada $_
en el mapa será una referencia de matriz. $$_[0]
(que también podría escribirse $_->[0]
) y luego toma el primer elemento de cada grupo creado by
.
O, usando la función mapn
cuales by
utiliza internamente:
use List::Gen qw/mapn/;
my @slice = mapn {$_[0]} 2 => @array;
O, si su lista de fuentes es enorme y puede que sólo necesite ciertos elementos, puede utilizar List::Gen
's listas perezosas:
use List::Gen qw/by gen/;
my $slicer = gen {$$_[0]} by 2 => @array;
$slicer
ahora es una lista diferida (una matriz de referencia) que generará sus sectores a pedido sin procesar nada que no haya pedido. $slicer
también tiene un montón de métodos de acceso si no desea usarlo como una matriz de ref.
Solo tenga en cuenta que si tiene una matriz vacía, este método agregará un elemento (vacío) (de modo que la nueva matriz ya no tenga el tamaño 0). – insaner