[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