У меня есть два файла myresult и аннотация. Подробности этих файлов следующие. myresult:цикл не работает после выполнения условия
288..639 1.13075739182609-6.20035408429888i
300..651 1.90372125344918-6.09008858828515i
312..663 1.6908117147722-5.67058877579329i
324..675 0.644484787809351-5.54571698740166i
336..687 1.21850904281332-5.47700589647424i
аннотация:
272..1042
1649..2629
Для цикла выполняется только один раз после того, как удовлетворяющих условию If. Он не входит снова в цикл даже после выполнения условия. например, в файле myresult 2-я строка удовлетворяет условию, то есть числа 300..651 находятся в диапазоне 1-й строки аннотации файла, поэтому он печатает все значения от 300 до 651. Но когда ему нужно идти в следующий раунд (3-я строка) т.е. 312..663, он не входит в этот цикл, так как этот диапазон также лежит в 1-й строке аннотации файла. , поэтому выход должен быть от 300 до 663, но он печатает только от 300 до 651. Код:
#!/usr/bin/perl
use Math::Complex;
open($inp0, "<myresult") or die "not found";
open($inp2, "<annotation") or die "not found";
my @arr2 = <$inp0>;
my @arr4 = <$inp2>;
my @result;
foreach my $line1 (@arr2) {
my ($col1, $col2) = split(/\s/, $line1);
if ($col2 > 1.60) {
my ($from1, $to1) = split(/\.\./, $col1);
foreach my $line2 (@arr4) {
my ($from2, $to2) = split(/\.\./, $line2);
for (my $i = $from1; $i <= $to1; $i++) {
for (my $j = $from2; $j <= $to2; $j++) {
$res = grep(/$i/, @result);
if ($i == $j && $res == 0) {
print "$i \n";
push(@result, $i);
}
}
}
}
}
}