[Cascavel-pm] Somar elementos numericos de um array

Daniel Ruoso daniel em ruoso.com
Terça Abril 10 10:26:46 PDT 2007


Ter, 2007-04-10 às 17:40 +0200, Luis Motta Campos escreveu:
> On Apr 10, 2007, at 3:27 PM, Daniel Ruoso wrote:
> > Hmmm... sei não mas acho que você não está sendo propriamente justo
> > nessa comparação... no caso do eval você tem uma função que não  
>    Reescreve, se você tiver tempo e saco, que eu quero entender o que  
> você está argumentado.
>    Por favor?

O código que o flávio mandou faz a mesma coisa que o código seguinte,
acho que vai ficar claro agora... 

----
use strict;
use warnings;

use List::Util qw(sum);
use Benchmark qw(:all);
use Data::Dumper;
my @numbers = ( 1..10 );

my $sub_eval;
{
	# na verdade isso deveria estar fora de qualquer forma...
	local $" = "+";
	# e o metodo pode ser ainda mais simples...
	my $string = "sub {
	    @numbers;
          }";
	warn 'The code is: '.$string.$/;
	$sub_eval = eval $string;
	$Data::Dumper::Deparse = 1;
	warn 'The sub is: '.Dumper($sub_eval);
}

cmpthese(
    -3,
    {
        'map' => sub {
            my $result;
            map { $result += $_ } @numbers;
        },
        'for' => sub {
            my $result;
            $result += $_ for @numbers;
        },
        'sum' => sub {
            my $result = sum(@numbers);
        },
        'eval' => $sub_eval,
    }
);
__END__

E um detalhe... às vezes esquecemos de desligar o ajuste automático de
frequência do processador antes de rodar benchmarks. Isso pode gerar um
resultado completamente errado... 

daniel



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