我正在使用Perl处理日志解析脚本。我正在阅读日志文件,如下所示:
open(LOGFILE, "$logFile") || die "Error opening log file $logFile\n";
while(<LOGFILE>)
{
#Processing statements goes here.
}
现在在处理语句中我想检查文件读取指针是否在最后一行。如果是,则希望在退出前处理条件。
所以问题是在while循环中用于逐行读取文件,如何确定它是否在最后一行?
答案 0 :(得分:13)
my $last;
while(<MYFILE>) {
$last = $_ if eof;
}
虽然除非你对其他每一行做一些事情,否则效率非常低。
答案 1 :(得分:6)
如果您只关心最后一行,请查看File::ReadBackwards。它专门用于日志文件以及最终感兴趣的项目的情况。
安装该模块后,您可以轻松地弹出最后一行(而不是直到发现整个文件):
#!/usr/bin/env perl
use strict;
use warnings;
use File::ReadBackwards;
my $fh = File::ReadBackwards->new( 'dir_walk.rb' )
or die "Can't read 'dir_walk.rb': $!";
my $last_line = $fh->readline;
print $last_line;
编辑:对于它的价值,如果您不想查看整个文件,我只会推荐这个。也就是说,如果你要读完整个文件,那么这可能不是最好的解决方案。 (我不确定你的问题是你只想检查最后一行中的特定项目,还是你还关心其余的日志。)