>perl -wMstrict -le "my $data = q{'A','B','C','D','E','F','G','H','I','J','K','L','M'}; ;; my @ra = split m{ (?: , [^,]+){3} \K , }xms, $data; ;; printf qq{:$_: } for @ra; " :'A','B','C','D': :'E','F','G','H': :'I','J','K','L': :'M': #### >perl -wMstrict -le "use List::MoreUtils qw(natatime); use Data::Dumper; ;; my @data = ('A','B','C','D','E','F','G','H','I','J','K','L','M'); ;; my $it = natatime 4, @data; my @groups; while (my @group = $it->()) { push @groups, \@group; } print Dumper \@groups; " $VAR1 = [ [ 'A', 'B', 'C', 'D' ], [ 'E', 'F', 'G', 'H' ], [ 'I', 'J', 'K', 'L' ], [ 'M' ] ];