1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #!/usr/bin/perl
use strict;
use warnings;
my $sequence = "RtcgggtacggKaat";
my %associations =
(
'R' => ["G", "A"],
'K' => ["G", "T"],
'S' => ["G", "C"],
'W' => ["A", "T"],
'M' => ["A", "C"],
'Y' => ["T", "C"],
'D' => ["G", "A", "T"],
'V' => ["G", "A", "C"],
'B' => ["G", "T", "C"],
'H' => ["A", "T", "C"],
'N' => ["A", "T", "C", "G"],
);
my %result;
sub reduce {
my $seq = shift;
$result{$seq}++ if ($seq !~ /[RKSWMYDVBHN]/);
for my $meta (keys %associations) {
next if ($seq !~ /$meta/);
for my $base (@{$associations{$meta}}) {
my $newseq = $seq;
$newseq =~ s/$meta/$base/;
reduce($newseq);
}
}
}
reduce($sequence);
print map {$_."\n"} keys %result; |
Partager