4

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

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

现在在处理语句中,我想检查文件读取指针是否在最后一行。如果是,那么想要在退出之前处理一个条件。

所以问题来自while循环,它被用来逐行读取文件,我如何找出它是否在最后一行?

4

2 回答 2

14
my $last;
while(<MYFILE>) {
   $last = $_ if eof;
}

尽管除非您对其他所有行都做某事,否则这是非常低效的。

于 2009-07-24T09:10:39.393 回答
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;

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

于 2009-07-24T10:45:34.990 回答