[Cascavel-pm] Duvida Foreach
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Terça Dezembro 4 12:12:21 PST 2007
On Dec 4, 2007 2:41 PM, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
> > É raro usar um for C-style. Mesmo para iteradores numéricos, prefiro usar:
> >
> > for my $i (0..$x) { }
> >
>
> Um comentario apenas: esta forma eh a menos eficiente em termos de
> memoria. se voce vai usar o formato do C, entao "abraca o capeta":
>
> for ( my $i = 0 ; $i <= $x; $i++ ) {}
>
> Esta eh a forma que melhor administra a tua memoria. isso faz diferenca
> especialmente quando teus intervalos de numeros sao grandes.
Em alguma versão do Perl 5.8.x foi introduzida uma otimização que não
faz mais com que o foreach utilizado para iterar sobre um range de
inteiros gerem uma lista temporária.
Observe:
#!/usr/bin/perl
use warnings;
use strict;
use Benchmark 'cmpthese';
my $limit = 1000000;
cmpthese(10, {
c_style => sub { my $j = 0; for (my $i = 0; $i <= $limit; $i++)
{ $j++ } },
foreach => sub { my $j = 0; for my $i (0..$limit) { $j++ } }
} );
Na verdade, o foreach acaba sendo 25% mais rápido na minha máquina (perl 5.8.8).
Rate c_style foreach
c_style 5.12/s -- -20%
foreach 6.40/s 25% --
O uso de memória é o mesmo em ambas as versões do código.
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm