Мне нужно найти все позиции совпадающих строк в большей строке, используя цикл while, а в качестве второго метода - цикл foreach.Я понял метод цикла while, но я застрял на методе foreach.Вот метод 'while':
....
my $sequence =
'AACAAATTGAAACAATAAACAGAAACAAAAATGGATGCGATCAAGAAAAAGATGC'.
'AGGCGATGAAAATCGAGAAGGATAACGCTCTCGATCGAGCCGATGCCGCGGAAGA'.
'AAAAGTACGTCAAATGACGGAAAAGTTGGAACGAATCGAGGAAGAACTACGTGAT'.
'ACCCAGAAAAAGATGATGCNAACTGAAAATGATTTAGATAAAGCACAGGAAGATT'.
'TATCTGTTGCAAATACCAACTTGGAAGATAAGGAAAAGAAAGTTCAAGAGGCGGA'.
'GGCTGAGGTAGCANCCCTGAATCGTCGTATGACACTTCTGGAAGAGGAATTGGAA'.
'CGAGCTGAGGAACGTTTGAAGATTGCAACGGATAAATTGGAAGAAGCAACACATA'.
'CAGCTGATGAATCTGAACGTGTTCGCNAGGTTATGGAAA';
my $string = <STDIN>;
chomp $string;
while ($sequence =~ /$string/gi )
{
printf "Sequence found at position: %d\n", pos($sequence)- length($string);
}
Вот мой метод foreach:
foreach ($sequence =~ /$string/gi )
printf "Sequence found at position: %d\n", pos($sequence) - length($string);
}
Может кто-нибудь дать мне подсказкупочему это не работает так же?Спасибо!
Мой вывод, если я введу "aaca":
Part 1 using a while loop
Sequence found at position: 0
Sequence found at position: 10
Sequence found at position: 17
Sequence found at position: 23
Sequence found at position: 377
Part 2 using a foreach loop
Sequence found at position: -4
Sequence found at position: -4
Sequence found at position: -4
Sequence found at position: -4
Sequence found at position: -4