如何读取Perl中不断更新的文件?
您好,我想通读一个文件,进入睡眠状态,然后检查是否有新记录写入该文件。如果是,我想处理记录,如果不是,回到睡眠状态,稍后再检查(在一个永久循环中) 我以为我可以做这样的事情,但是在它第一次读取文件之后,它似乎从来没有拾取添加到文件中的新记录如何读取Perl中不断更新的文件?,perl,Perl,您好,我想通读一个文件,进入睡眠状态,然后检查是否有新记录写入该文件。如果是,我想处理记录,如果不是,回到睡眠状态,稍后再检查(在一个永久循环中) 我以为我可以做这样的事情,但是在它第一次读取文件之后,它似乎从来没有拾取添加到文件中的新记录 open (LOG, "<log_file") or die ("could not open log_file"); for (; ;) { print "Record Number == $.\n"; while ($
open (LOG, "<log_file") or die ("could not open log_file");
for (; ;)
{
print "Record Number == $.\n";
while ($text=<LOG>)
{
chomp ($text);
print "$text\n";
}
sleep (60);
}
close (LOG);
open(LOG),是您的朋友。这是因为当文件句柄返回EOF时,while循环将终止。您需要在读取之前清除EOF标志
在while循环和sleep之后使用seek
seek(LOG, 0, 1);
字面意思是:从当前位置移动零字节。它不会在文件中前进,但会清除下一次读取的EOF条件
您还可以使用IO::Handle模块并调用clearerr()
最后,如果你愿意使用一个绑定的文件句柄,在CPAN上有一个文件::/TP>你可以尝试。
< P>这是Perl FAQ所涵盖的。请参阅完整的条目。如果你愿意安装一个模块,你应该考虑。 @ JMANNY2K,你是否有一个链接来处理这个?Perl食谱有如下内容,这看起来是很弱。。。
for (;;) {
while () { .... }
sleep $SOMETIME;
seek(FH, 0, 1);
}
对于(;;){
while(){…}
找个时间睡一觉;
寻道(FH,0,1);
}
或者IO::Handle模块的clearerr方法:
use IO::Seekable;
for (;;) {
while () { .... }
sleep $SOMETIME;
FH->clearerr();
}
使用IO::Seekable;
对于(;;){
while(){…}
找个时间睡一觉;
FH->clearerr();
}
use IO::Seekable;
for (;;) {
while () { .... }
sleep $SOMETIME;
FH->clearerr();
}