|
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
|