@triplets0 = $line =~ /(...)/g; @triplets1 = substr($line, 1) =~ /(...)/g; @triplets2 = substr($line, 2) =~ /(...)/g; #### push(@triplets, [ substr($line, $_) =~ /(...)/g ]) for 0..2; #### $group_size = 3; push(@groups, [ substr($line, $_-1) =~ /(.{$group_size})/g ]) for 1..$group_size; #### $line = 'atccatccctttaat'; push(@triplets, [ substr($line, $_) =~ /(.{$_})/g ]) for 0..2; require Data::Dumper; print(Data::Dumper::Dumper(\@triplets)); __END__ output ====== $VAR1 = [ [ 'atc', 'cat', 'ccc', 'ttt', 'aat' ], [ 'tcc', 'atc', 'cct', 'tta' ], [ 'cca', 'tcc', 'ctt', 'taa' ] ];