3 perl
问候,我想通读文件,进入睡眠状态,然后检查新记录是否写入文件.如果是,我想处理记录,如果没有回去睡觉并稍后再次检查(在永久循环中).
我以为我可以做这样的事情但是在第一次读取文件之后,它似乎永远不会拿起添加到文件中的新记录.
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);
Run Code Online (Sandbox Code Playgroud)
在最初读取文件之后,上面的脚本只是继续打印文件中最后一条记录的记录号.我看到了一些关于TailFile软件包的问题,但看起来我没有它,而且此时很难加载.我希望有一个vanilla perl解决方案.
提前致谢.
那是因为你的while循环将在文件句柄返回EOF时终止.在阅读之前,您需要清除EOF标志.
在while循环和睡眠之后使用seek.
seek(LOG, 0, 1);
Run Code Online (Sandbox Code Playgroud)
从字面上说:从当前位置移动零字节.它不会在文件中前进,但会清除下一次读取的EOF条件.
您还可以使用IO :: Handle模块并调用clearerr();
use IO::Handle;
# ...
LOG->clearerr();
Run Code Online (Sandbox Code Playgroud)
最后,如果你愿意使用tie'd文件句柄,你可以试试CPAN上的File :: Tail模块.