use warnings; use strict; my @words = kmers(3); sub kmers { my $k = shift; my @bases = qw( A T G C ); my @words = @bases; for my $i (1 .. $k - 1) { print "\nBEGIN \$i = $i:\n"; print " \@bases = @bases\n"; print " \@words = @words\n"; my @newwords; for my $w (@words) { push @newwords, $w.$_ for @bases; } @words = @newwords; print "END \$i = $i:\n"; print " \@bases = @bases\n"; print " \@words = @words\n"; } return @words; }