ich das Modul List::Gen auf CPAN geschrieben haben, die eine alternative Möglichkeit bietet, dies zu tun:
use List::Gen qw/by/;
my @array = qw/zero one two three four five six/;
my @slice = map {$$_[0]} by 2 => @array;
by
Partitionen @array
in Gruppen von zwei Elemente und gibt ein Array von Array-Referenzen zurück. map
erhält dann diese Liste, so dass jeder $_
in der Karte eine Array-Referenz sein wird. $$_[0]
(was auch geschrieben werden könnte $_->[0]
) dann ergreift das erste Element jeder Gruppe, die by
erstellt.
Oder mit der mapn
Funktion, die by
intern verwendet:
use List::Gen qw/mapn/;
my @slice = mapn {$_[0]} 2 => @array;
Oder, wenn Ihre Quelle Liste ist riesig und man kann nur noch bestimmte Elemente, können Sie List::Gen
‚s faul Listen verwenden:
use List::Gen qw/by gen/;
my $slicer = gen {$$_[0]} by 2 => @array;
$slicer
ist jetzt eine faule Liste (ein Array ref), die es der Scheiben auf Nachfrage generieren, ohne etwas zu verarbeiten, die Sie nicht gebeten haben. $slicer
verfügt auch über eine Reihe von Accessor-Methoden, wenn Sie sie nicht als Array-Referenz verwenden möchten.
Wenn Sie ein leeres Array haben, fügt diese Methode ein (leeres) Element hinzu (so dass das neue Array nicht mehr die Größe 0 hat). – insaner