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

Ruslan Zakirov ruz на bestpractical.com
Сб Мар 29 08:34:08 PDT 2008


я┌п╟п╪ п╬я┬п╦п╠п╨п╟ п╥п╟п╨я─п╟п╩п╟я│я▄. п÷п╬п©я─п╠я┐п╧я┌п╣ п╡п╬я┌ я┌п╟п╨п╬п╧ п╡п╟я─п╦п╟п╫я┌.

п╪п╫п╣ п╫я┐п╤п╫п╬ я┐п╠п╣пЁп╟я┌я▄.


2008/3/29 Ivan B. Serezhkin <ivan на serezhkin.com>:
> Ruslan Zakirov wrote:
>  > п°п╬п╤п╫п╬ я└п╟п╧п╩п╬п╪ п©п╬п╩я┐я┤п╦я┌я▄ п╣я┌п╬ п╢п╣п╩п╬. п╖я┌п╬п╠я▀ я└п╬я─п╪п╟я┌п╦я─п╬п╡п╟п╫п╦п╣ п╫п╣ п╠п╦п╩п╬я│я▄.
>  >
>  > On Sat, Mar 29, 2008 at 5:43 PM, Ivan B. Serezhkin <ivan на serezhkin.com> wrote:
>  >
>  >> п÷я─п╦п╡п╣я┌.
>  >>
>  >>  п▓ п©я─п╬я┬п╩п╬п╪ п©п╦я│я▄п╪п╣ п╫п╟п╡я─п╟п╩, п╡п╪п╣я│я┌п╬ п╦п╫п╢п╣п╨я│п╟ п╬п©я▐я┌я▄ п╥п╟п╪п╣я─п╦п╩ я─п╣пЁп╣п╨я│.
>  >>
>  >>           Rate   Line  Index Regexp
>  >>  Line   4.78/s     --   -88%   -96%
>  >>  Index  39.4/s   725%     --   -64%
>  >>  Regexp  109/s  2191%   178%     --
>  >>
>
>
>  --
>  Ivan B. Serezhkin
>
>
> #!/usr/bin/perl
>  # -*- Encoding: utf-8; Mode: cperl -*-
>  use strict;
>  use utf8;
>  use Storable qw(freeze dclone);
>  use Benchmark qw(:all) ;
>  use POE::Filter::Line;
>
>  my @s=map {join '', map { 'SEPARATOR'.'data'x(100+int(rand(100))) } (1..100)} (1..10);
>
>  cmpthese(100, {
>                   Regexp => sub {
>                       my $data=dclone(\@s);
>                       my $f=POE::Filter::Regexp->new(qr/SEPARATOR/);
>                       $f->get($data);
>                   },
>                   Index =>  sub {
>                       my $data=dclone(\@s);
>                       my $f=POE::Filter::Index->new(qr/SEPARATOR/);
>                       $f->get($data);
>                   },
>                   Line =>  sub {
>                       my $data=dclone(\@s);
>                       my $f=POE::Filter::Line->new(InputRegexp => qr/SEPARATOR/);
>                       $f->get($data);
>                   },
>                  });
>
>
>
>
>
>
>
>
>  package POE::Filter::Regexp;
>  use strict;
>  use vars qw($VERSION);
>
>  $VERSION='Production 1.0';
>
>  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 [
>                   [], # ready queue
>                   '', # raw unparsed data
>                   $re,
>                  ], $class;
>  }
>
>  sub get {
>     my ($self, $stream) = @_;
>     my @ret;
>     while($_=shift @$stream){
>         $self->[1].=$_;
>         $_=''; #yah we'r cl'r mems !!!111
>         my $p=0;
>         while($self->[1]=~/$self->[2]/gm) {
>             next unless $-[0]; #begin of stream
>             push @ret, substr($self->[1], $p, $-[0]-$p);
>             $p=$-[0];
>         }
>         substr($self->[1], 0, $p)='';
>     }
>     $self->[1]=''.$self->[1]; #Clean holes in string.
>     return \@ret;
>  }
>
>
>
>
>  package POE::Filter::Index;
>  use strict;
>  use vars qw($VERSION);
>
>  $VERSION='Devel';
>
>  sub new {
>     my ($class,$sep)=@_;
>     $sep ||= "\n";
>     return bless [
>                   [], # ready queue
>                   '', # raw unparsed data
>                   $sep,
>                  ], $class;
>  }
>
>  sub get {
>     my ($self, $stream) = @_;
>     my @ret;
>     while($_=shift @$stream){
>         $self->[1].=$_;
>         $_=''; #yah we'r cl'r mems 4 4ture iterations !!!111 one one
>         my $b=0; #base
>         my $p;
>         while(($p=index($self->[1], $self->[2], $b+1)) >0) {
>             push @ret, substr($self->[1], $b, $p-$b);
>             $b=$p;
>         }
>         substr($self->[1], 0, $b)='';
>     }
>     $self->[1]=''.$self->[1]; #Clean holes in string.
>     return \@ret;
>  }
>
> --
>  Moscow.pm mailing list
>  moscow-pm на pm.org | http://moscow.pm.org
>  http://mail.pm.org/mailman/listinfo/moscow-pm
>



-- 
Best regards, Ruslan.
----------- следущая часть -----------
п▓п╩п╬п╤п╣п╫п╦п╣ п╫п╣ п╡ я┌п╣п╨я│я┌п╬п╡п╬п╪ я└п╬я─п╪п╟я┌п╣ п╠я▀п╩п╬ п╦п╥п╡п╩п╣я┤п╣п╫п╬&hellip;
п≤п╪я▐     : poe_filter_split2.pl
п╒п╦п©     : application/x-perl
п═п╟п╥п╪п╣я─  : 2401 п╠п╟п╧я┌п╬п╡
п·п©п╦я│п╟п╫п╦п╣: п╬я┌я│я┐я┌я│я┌п╡я┐п╣я┌
Url     : http://mail.pm.org/pipermail/moscow-pm/attachments/20080329/61a1fe72/attachment-0001.bin 


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