求助:关于日志分析性能优化

求助:关于日志分析性能优化

有一个分析日志的程序

分析大致流程如下:

[Copy to clipboard] [ - ]
CODE:
open(LOG, "< $curLog" )  
   || die "Can't open $curLog: $!\n";
while(<LOG>) {
   my $line = $_;
   chomp $line; $line =~ s/\r$//;
   if (! (@field=map(/$parsingFormat/,$line))) {
      if ($Debug) { print 'line = ', $line, "\n"; }
      next;
   }
   ...
}
close(LOG);

$parsingFormat对不同日志来说可能不一样

现发现分析日志的时间有三分之一花在map上
有没什么办法优化呢
我在想是不是每读入一行, 都要重新编译下map用到的正则表达式呢?


QUOTE:
原帖由 iceberg77 于 2008-3-13 12:34 发表
有一个分析日志的程序

分析大致流程如下:
open(LOG, "< $curLog" )  
   || die "Can't open $curLog: $!\n";
while() {
   my $line = $_;
   chomp $line; $line =~ s/\r$//;
   if (! (@field=map( ...

这样是不是一个意思呢?

open(LOG, "< $curLog" )  
   || die "Can't open $curLog: $!\n";
while(<LOG>) {
   chomp;
   s/\r$//;
   if ! /$parsingFormat/ {
      print "line = $_\n" if $Debug;
      next;
   }
   ...
}
close(LOG);
谢谢

QUOTE:
原帖由 ly5066113 于 2008-3-13 12:43 发表


这样是不是一个意思呢?

open(LOG, "< $curLog" )  
   || die "Can't open $curLog: $!\n";
while() {
   chomp;
   s/\r$//;
   if ! /$parsingFormat/ {
      print "line = $_\n" if $Debug; ...

不是
用map是要把匹配$parsingFormat的保存变量填充到@field里, 以便接下来的分析
在map之前将
$parsingformat编译成模块
然后再map


QUOTE:
原帖由 churchmice 于 2008-3-13 14:28 发表
在map之前将
$parsingformat编译成模块
然后再map

是指预编译吗
在分析之前, 已调用qr

[Copy to clipboard] [ - ]
CODE:
$parsingFormat = qr/^$parsingFormat/;