Мне было интересно, знает ли кто-нибудь, как упростить или обобщить этот код. Он дает правильный ответ, однако применим только к текущей ситуации. Мой код выглядит следующим образом:
sub longestRepeat{
# list of argument @_ is: (sequence, nucleotide)
my $someSequence = shift(@_); # shift off the first argument from the list
my $whatBP = shift(@_); # shift off the second argument from the list
my $match = 0;
if ($whatBP eq "AT"){
if ($someSequence =~ m/(([A][T])\2\2\2\2\2)/g) {
$match = $1
}
return $match;
}
if ($whatBP eq "TAGA"){
if ($someSequence =~ m/(([T][A][G][A])\2\2)/g) {
$match = $1
}
return $match;
}
if ($whatBP eq "C"){
if ($someSequence =~ m/(([C])\2\2)/g) {
$match = $1
}
return $match;
}
}
Мой вопрос заключается в том, что во втором операторе if я установил заданное количество повторений этого шаблона (применимо к строке, которую нам дали). Однако есть ли способ продолжать выполнять цикл while для поиска по \2 (повторение шаблона)? Я имею в виду, может ли это: if ($someSequence =~ m/(([A][T])\2\2\2\2\2)/g) быть упрощенным и обобщенным с помощью цикла while