[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