如何在perl中的循环内读取文件时,它是否是最后一行

时间:2009-07-24 09:03:46

标签: perl logging filehandle

我正在使用Perl处理日志解析脚本。我正在阅读日志文件,如下所示:

open(LOGFILE, "$logFile") || die "Error opening log file $logFile\n";                           
while(<LOGFILE>) 
{   
  #Processing statements goes here.
}

现在在处理语句中我想检查文件读取指针是否在最后一行。如果是,则希望在退出前处理条件。

所以问题是在while循环中用于逐行读取文件,如何确定它是否在最后一行?

2 个答案:

答案 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;

编辑:对于它的价值,如果您想查看整个文件,我只会推荐这个。也就是说,如果你要读完整个文件,那么这可能不是最好的解决方案。 (我不确定你的问题是你只想检查最后一行中的特定项目,还是你还关心其余的日志。)