2013-07-09 2 views
2

Я использую цикл while для назначения действительных чисел из входного файла в массив. Входной файл настроен таким образом, чтобы первые 21 балл в массиве были пустыми. Число 21 соответствует номеру строки, содержащей фразу «диапазон1» в моем входном файле минус 1. Я используюКак найти номер строки определенной фразы в perl?

splice @range_min, 0, $header_lines-1; 

удалить эти пустые строки из моего массива.

Я хочу, чтобы $ header_lines был равен номеру строки, содержащей эту фразу, так как я мог бы иметь другие входные файлы с этой фразой в другой строке.

Я уже пытался ставить следующую команду в мое время цикла:

$header_lines = $., last if /Range1/; 

, который делает работу, но она полностью очищает мой массив (поражение цели моей программы).

Есть ли лучший способ найти номер строки моей фразы во входном файле, не затрагивая мой цикл while или array?

ответ

2

Попробуйте положить это в цикле вместо:

if (/Range1/) { 
     $header_lines = $.; 
    } 

Я думаю, что в настоящее время происходит то, что каждый раз через петлю, вы настраиваете $ header_lines на номер текущей строки ($.). Код "last if/Range1 /;" выходит из вашего цикла, когда $ _ соответствует Range1. Таким образом, вы бы установили только первые 21 строки, а затем ушли, а затем стирали все строки.

+0

Это сработало отлично! Спасибо. Я думаю, что ваше объяснение тоже верно. –

Смежные вопросы