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

Vik*_*iky 4 perl logging filehandle

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

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

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

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

but*_*ken 13

my $last;
while(<MYFILE>) {
   $last = $_ if eof;
}
Run Code Online (Sandbox Code Playgroud)

虽然除非你对其他每一行做一些事情,但效率非常低.


Tel*_*hus 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;
Run Code Online (Sandbox Code Playgroud)

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