Ваш код - беспорядок.Кроме того, это никак не решает вашу проблему.
То, что вы хотите сделать, - это split
строки из файла в цикле while
, сохраняя их в хэше.Получив значения, вы можете легко сравнить их с операторами <
и >
, чтобы увидеть, в какие диапазоны они попадают.
use strict;
use warnings;
use autodie;
my (%data1,%data2);
open my $in, '<', 'data1.txt';
while (<$in>) {
next unless /^\s*\d/;
my ($num, $posi) = split;
$data1{$num} = $posi;
}
open $in, '<', 'data2.txt';
while (<$in>) {
next unless /^\s*\d/;
my ($num, $star, $end) = split;
$data2{$num}{'star'} = $star;
$data2{$num}{'end'} = $end;
}
close $in;
Обратите внимание, что я пропускаю (next
) любые строкикоторые не начинаются с цифр, например, заголовков и пустых строк и других вещей, которые нам не нужны в данных.
Теперь у вас будут значения в хешах, и вы сможете выполнять любые необходимые вам тесты.Например:
for my $num (keys %data1) {
my $val = $data1{$num};
for my $num2 (keys %data2) {
my $min = $data2{$num2}{'star'};
my $max = $data2{$num2}{'end'};
if ( ($val > $min) and ($val < $max) ) {
print "Data 1 at posi $val contained in Data 2 between star_posi $min and end_posi $max.\n";
last;
}
}
}
Удачи!