[Cascavel-pm] Somar elementos numericos de um array

Luis Motta Campos luismottacampos em yahoo.co.uk
Terça Abril 10 08:37:24 PDT 2007


On Apr 10, 2007, at 2:29 PM, Flavio S. Glock wrote:
> Não subestime o eval - dependendo como você usá-lo ele pode ser muito
> rápido (e evita o uso de XS em alguns casos):
>
>           Rate  for  map eval  sum
> for   365652/s   -- -13% -78% -86%
> map   421556/s  15%   -- -74% -83%
> eval 1633707/s 347% 288%   -- -36%
> sum  2540158/s 595% 503%  55%   --

   OPA! Aconteceu alguma coisa aqui!

> ----
>
> use strict;
> use warnings;
>
> use List::Util qw(sum);
> use Benchmark qw(:all);
>
> my @numbers = ( 1 .. 10 );
>
> cmpthese(
>     -3,
>     {
>         'map' => sub {
>             my $result;
>             map { $result += $_ } @numbers;
>         },
>         'for' => sub {
>             my $result;
>             $result += $_ for @numbers;
>         },
>         'sum' => sub {
>             my $result = sum(@numbers);
>         },
>         'eval' => eval 'sub {
>             local $" = "+";
>             my $result;
>             $result = '. em numbers.';
>           }',
>     }
> );

   Agora quem precisa de explicações sou eu:
   O que está acontecendo?
   O seu código monta um programa que para mim parece ser a mesma  
coisa... mas sem a interpolação de string.
   O que estava "melando" o eval() era apenas as rotinas de conversão  
de número para string?

   Putamplexos curiosos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




Mais detalhes sobre a lista de discussão Cascavel-pm