|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Chernomyrdin 2:5020/400 10 Oct 2001 00:01:55 To : All Subject : script oprimize --------------------------------------------------------------------------------
Hi!
Вот тут хотелось-бы отоптимизировать скрипт, так что хотелось-бы посоведоваться
с обществом как лучше это сделать для нижеприведенной программы (см. ниже)
Смысл программы - на вход поток (log file) в командной строке задается
произвольное количество пар regexp/filename, и собственно при нахождении
заданного regexp, строка записывается в соответствующий файл. Смысл этого в том
что-бы за один проход по файлу (размер достаточно большой) вытащить все
интересующие (соответствующие regexp-ам) фрагменты этого log файла.
- --
#!/usr/bin/perl -w
#
package main;
use strict;
use Getopt::Long;
use IO::File;
&main;
1;
sub main {
my $rc;
my @regexp = ();
my @file = ();
my @ls = ();
my $lsptr = undef;
$rc = GetOptions(
'regex=s' => \@regexp,
'file=s' => \@file,
);
while( @regexp and @file ) {
my(
$re,
$fn,
);
$re = shift @regexp;
$fn = shift @file;
push( @ls,
LogSegment->new( $re, $fn )
);
}
while( <> ) {
$rc = 0;
foreach $lsptr ( @ls ) {
if( $lsptr->test( $_ ) ) {
$rc++;
last;
}
}
print $_
if( $rc == 0 );
}
foreach $lsptr ( @ls ) {
$lsptr->close();
}
}
package LogSegment;
sub new {
my $class = shift;
my $re = shift;
my $fn = shift;
my $self = {};
$self->{RE} = qr/$re/;
$self->{FN} = $fn;
$self->{FH} = new IO::File;
bless( $self, $class );
return $self;
}
sub close {
my $self = shift;
$self->{FH}->close()
if( $self->{FH}->opened );
}
sub test {
my $self = shift;
local $_ = shift;
my $rc = 0;
if( /$self->{RE}/ ) {
if( not $self->{FH}->opened ) {
$self->{FH}->open( $self->{FN}, "a" );
$self->{LINES} = 0;
}
if( $self->{FH}->opened ) {
$self->{FH}->print( $_ );
$self->{LINES}++;
}
$rc = 1;
}
return $rc;
}
- --
--
With Best,
Andrey <andrey@excom.spb.su>
--- ifmail v.2.15dev5
* Origin: X-Com Online (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/64260e395a23.html, оценка из 5, голосов 10
|