### Typical sequence lengths are 10-50k letters my $sub = "CGAGCGTTGACGCNNAGCTAGT"; my @bases = ### Count base frequencies while ($sub =~ /([GCATN])/g) { if ($1 eq 'G') { $bases{g}++; } if ($1 eq 'C') { $bases{c}++; } if ($1 eq 'A') { $bases{a}++; } if ($1 eq 'T') { $bases{t}++; } if ($1 eq 'N') { $bases{n}++; } } ### I need to create an array of bases to pass to rand() my @bases = ( ('G') x $bases{g}, ('C') x $bases{c}, ('A') x $bases{a}, ('T') x $bases{t}, ('N') x $bases{n} ); ### These are sample regex's: I actually test 24 different ones $promoters_regex[0] = '[NT][GCATN][NG][NC][NG][NT][NG]'; $promoters_regex[1] = '[NG][NT][NG][NC][NG][GCATN][NT]'; $promoters_regex[2] = '[NA][GCATN][NC][NG][NC][NA][NC]'; $promoters_regex[3] = '[NC][NA][NC][NG][NC][GCATN][NA]'; ### I would like $permutations_count = 100_000 for (my $i = 0; $i < $permutations_count; $i++) { my $string; # create new string for (my $j = 0; $j < length($sub); $j++) { $string .= $bases[rand @bases]; } # test string for matches for (my $j = 0; $j < scalar(@promoters_regex); $j++) { while ($string =~ /$promoters_regex[$j]/g) { $permutations_total++; } } }