Я не то, чтобы перлист, но было дано задание набросать парсер для логов. Условия: лог-файл парсится в реал-тайме (т.е. отложенный парсинг после ротации исключен), они постоянно ротируются.
Набросал вот это:
my $res = stat($filename);
my $newres = stat($filename);
my $eof = 0;
my $changenow = 0;
open(my $fd, '<', $filename) or die $!;
while (1) {
my $line = <$fd>;
if (!length($line)) {
$eof = 1;
} else {
$eof = 0;
chomp $line;
parse_line($line);
next;
}
$newres = stat($filename);
if ($newres->ino != $res->ino) {
if ($changenow && $eof) {
close($fd);
open($fd, '<', $filename) or die $!;
$res = $newres;
$changenow = 0;
next;
}
if ($eof) {
$changenow = 1;
}
}
sleep(10);
}
Работоспособна ли такая схема?