Я думаю, вы неправильно понимаете, что делает seek()
. При SEEK_SET
в качестве третьего параметра второй параметр интерпретируется как позиция, в которую необходимо переместиться, как измерено от начала файла. Поэтому каждый раз, когда вы запускаете эту строку:
seek($IN, 6, SEEK_SET);
Он всегда перемещается на седьмую позицию в файле (которая, очевидно, всегда находится на одной строке). Затем, когда вы запустите эту строку:
seek($IN, 0, SEEK_SET);
Всегда возвращается к началу файла.
Первоначально я думал, что решение состоит в том, чтобы изменить SEEK_SET
на SEEK_CUR
(который интерпретирует второй параметр как величину, чтобы двигаться относительно текущей позиции), но это немного сложнее, чем это. Вот как я заставил это работать:
seek($IN, 6, SEEK_CUR); # Move forward six spaces
$line = read($IN, $data, 4);
seek($IN, 7, SEEK_CUR); # Move forward seven places
Но на самом деле регулярное выражение - лучший подход здесь.
while(<$IN>) {
($data) = /\s(\d{4})/;
print "$data\n";
}