use Data::Dumper; my $step = 5; my @array = ('a'..'z'); print Dumper [ map[ @array[$_..$_+$step-1] ], range(0,$#array,$step) ]; #### # usage: my @AoA = range($start,$stop[,$step]); sub range {grep!(($_-$_[0])%($_[2]||1)),$_[0]..$_[1]}