use Modern::Perl '2014'; use Algorithm::Permute; my @elements = qw/ A C T G /; my @permutations; Algorithm::Permute::permute { push @permutations, ( join '(?:', @elements ) . ')?)?)?'} @elements; my $regex = join '|', @permutations; $regex = qr/^(?:$regex)$/; say "Testing"; for my $length ( 1 .. 4 ) { my $p = new Algorithm::Permute( [ qw/ A C T G A C T G A C T G A C T G X /, ' ' ], $length ); while ( my @res = $p->next ) { my $test = join( '', @res ); print "$test\t"; say $test=~ /$regex/ ? 'Accept' : 'Reject'; } } #### Testing A Accept C Accept T Accept G Accept (...) X Reject Reject CA Accept AC Accept TC Accept CT Accept (...) GA Accept AA Reject CC Reject (...) AG Accept XC Reject CX Reject XT Reject (...) CTGA Accept TCGA Accept TGCA Accept TGAC Accept CAGA Reject ACGA Reject (...)