Если я правильно понял, вам просто нужно прочитать файл и найти два значения. Эти значения представляют собой последовательность цифр после слова «фин» и после слова «дебют». Прямо сейчас вы пытаетесь сопоставить их, ища что-то, что происходит перед строкой, которая вас интересует. Возможно, вам следует искать актуальную информацию, представляющую интерес.
В регулярном выражении почти всегда лучше искать интересный текст, чем пытаться пропустить неинтересный текст. Что-то вроде следующего будет работать лучше.
Обратите внимание, что я изменил чтение вашего файла, потому что вы читали в переменную, а затем обрабатывали $ _, что (почти наверняка) не то, что вы имели в виду.
while (my $line = <FILE>) #read each line from FILE.
{
chomp ($line);
# These two lines could be combined but this is a little clearer.
# Matching against [0-9] because \d matches all unicode digits.
my ($fin_digits) = $line =~ /fin\s+([0-9]+)/;
my ($debut_digits) = $line =~ /debut\s+([0-9]+)/; # as above.
# Continue processing below...
}
Теперь, одно отличие состоит в том, что данные вашего примера показывают множественные вхождения fin и debut в одну строку. Если это так, вам понадобится немного другое регулярное выражение. Дайте нам всем знать, так ли это на самом деле.
UPDATE
Учитывая, что у вас действительно совпадающие пары на одной и той же линии, вы можете использовать что-то вроде следующего. Опять же, я добавил только соответствие регулярных выражений, а не код обработки. Этот код фактически допускает произвольное количество пар в одной строке.
while (my $line = <FILE>) #read each line from FILE.
{
chomp ($line);
# These two lines could be combined but this is a little clearer.
# Matching against [0-9] because \d matches all unicode digits.
# In list context, m// returns the matches in order, the /g modifier
# makes this a global match - in a loop this means each pair of
# matches will be returned in order.
while (my ($debut, $fin) =~ /debut\s+([0-9]+).+?fin\s+([0-9]+)/g)
{
# result processing here.
}
}