[bcn-pm] Split: Perl vs. Python (vs. Awk?)

Salvador Fandiño sfandinoayahoo.com
Dil Mar 13 07:36:43 PST 2006



--- Salvador Fandi�o <sfandino en yahoo.com> wrote:

> 
> 
> --- Enrique Nell <perl_nell en telefonica.net> wrote:
> 
> > 
> > Deber�ais aliaros Salva y t� para crear el m�dulo
> Split::Faster:-)
> 
> lo suyo seria crear una optimizacion en el propio perl para
> construcciones del tipo
> 
>   @a = split //, $foo;

jugando con B::Deparse he visto que esto ya lo hace en algunas
ocasiones (desafortunadamente poco frecuentes). Probad 

  perl -MO=Deparse 'my @foo = split //, $ARGV[0]'
  perl -MO=Deparse '@foo = split //, $ARGV[0]'
  perl -MO=Deparse '@foo = split'

y vereis como en el primer y tercer caso aparece el opcode aasign y
en cambio en el segundo se pasa como una referencia al split.

Y para terminar un benchmark:


 use Benchmark qw(cmpthese);

 my @lexical;
 my @t;

 for (1..100) {
   push @t, pack('c*', map { 32+int(rand 8) } (0..int(rand 100000)))
 }

 cmpthese ( -1,
   { lexical => sub { for my $t (@t) { @lexical = split //, $t} },
     global => sub { for my $t (@t) { @global = split //, $t } } } );


en mi ordenador obtengo

         s/iter lexical  global
 lexical   12.1      --    -39%
 global    7.40     64%      --


- Salva


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


Més informació de la llista de correu Barcelona-pm