Полагаю, вы имеете в виду, что порядок содержимого в скобках не важен, поэтому AT
эквивалентно TA
, TAG
эквивалентно TGA
и т. Д.
[Обратите внимание, что другой Эрик сделал другое предположение. Вы не очень понимали, что вы хотели. ]
Вы можете отсортировать буквы.
sub key { join '', sort split //, $_[0] }
my @subs = (
AG => "R",
TC => "Y",
GT => "K",
AC => "M",
GC => "S",
AT => "M",
CGT => "B",
TGA => "D",
ACT => "H",
ACG => "V",
ACGT => "N",
);
my %subs;
while (@subs) {
my $key = shift(@subs);
my $val = shift(@subs);
$subs{ key($key) } = $val;
}
# Die on unrecognized
$seq =~ s/\[(\w+)\]/ $subs{ key($1) } or die $1 /ge;
или
# Do nothing on unrecognized
$seq =~ s/\[(\w+)\]/ $subs{ key($1) } || $1 /ge;