Цитата(sir_nuf_nuf @ 8.11.2008, 13:26 ) | | назовите мне причину по которой вы не сможете писать в файл ? |
Я тоже не вижу веских причин. Хранение в отдельном файле лучше со всех точек зрения. Но технически не сложно организовать хранение и в теле скрипта, причем где именно -- особой роли не играет. Но пусть будет в блоке __DATA__:
| Код | use Fcntl ':flock';
my $log = './file.log';
open LOG, '<', $log or die "Can't open $log: $!\n"; flock(LOG,LOCK_EX);
my $pos = 0;
$pos = do {chomp; $_} while <DATA>;
seek LOG, $pos, 0 if $pos <= -s $log;
while (<LOG>) { print; }
$pos = tell LOG; flock(LOG,LOCK_UN); close LOG;
exec qw(perl -0777 -i -pe), 's/$/\n'.$pos.'/', $0;
__DATA__ 0 |
Этот скрипт после каждого вызова дописывает себе в конец строку с последней позицией лог-файла, и чтение его начинает с этой позиции. Как быть, если сторонняя программа (например, logrotate) изменит лог-файл -- другой вопрос. Минимальная защита в предлагаемом скрипте предусмотрена -- если сохраненная позиция оказывается больше размера лога, то чтение начнется с начала.
|