[Moscow.pm] POE::Filter::Line

Ivan B. Serezhkin ivan на serezhkin.com
Пн Мар 17 05:09:29 PDT 2008


Привет.
Может кому и интересно ?
получил прирос в 25 раз на больших файлах.
Можете поругать стиль =)
На очереди сделать нормальный быстрый драйвер.
И кстати, это удобный темплейт для написания своих фильтров, например 
POE::Filter::Log::Postfix =)
Использовать так:

Wheel ...
Driver => POE::Driver::SysRW->new( BlockSize => 256*1024*1024) ,
Filter => POE::Filter::Regexp->new(qr/RecordSeparator/),
....



package POE::Filter::Regexp;
use strict;

sub new {
my ($class,$re)=@_;
$re ||= qr/\n/;
die "Param in new must be a Regexp but this is a ".ref($re) unless ref 
$re eq 'Regexp';
return bless [
'', # raw unparsed data
[], # ready queue
$re,
], $class;
}

sub get {
my ($self, $stream) = @_;
my @ret;
while($self->[0].=shift @$stream){
my $p=0;
while($self->[0]=~/$self->[2]/g) {
next unless $-[0]; #begin of stream
push @ret, substr($self->[0], $p, $-[0]-$p);
$p=$-[0];
}
substr($self->[0], 0, $p)=undef;
}
return \@ret;
}
1;

-- 
Ivan B. Serezhkin



Подробная информация о списке рассылки Moscow-pm