$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' ] ];