[SP-pm] atalhos toscos

Eden Cardim edencardim at gmail.com
Wed Oct 6 04:49:39 PDT 2010


>>>>> "Stanislaw" == Stanislaw Pusep <creaktive em gmail.com> writes:

    Stanislaw> perl -le'print for reverse 0..10' Pois isso, sim,
    Stanislaw> seria totalmente ineficiente e é um caso onde o velho e
    Stanislaw> bom for($i=10;$i;$i--) seria o mais apropriado em todos
    Stanislaw> os sentidos :) 

O C-style for é mais eficiente em termos de utilização de memória,
porém, além de ser mais legível, reverse/range é mais rápido porque
compila para menos opcodes, além de ser mais curto e legível, então acho
que se enquadra no propósito original dessa thread, que é o de usar
atalhos. Em perl existem poucos motivos para se usar um C-style
for. Aliás, nesse exato momento não consigo pensar em um caso sequer.

use warnings;
use strict;
use Benchmark qw(:all);

timethese(10**7, {
    for => sub {
        my @array;
        for(my $i = 10; $i >= 0; $i--) {
            push @array, $i;
        }
    },
    range => sub {
        my @array = reverse 1..10;
    }
});

bjork:sandbox edenc $ perl test.pl 
Benchmark: timing 10000000 iterations of for, range...
       for: 34 wallclock secs (32.60 usr +  0.16 sys = 32.76 CPU) @ 305250.31/s (n=10000000)
     range: 22 wallclock secs (21.45 usr +  0.13 sys = 21.58 CPU) @ 463392.03/s (n=10000000)

bjork:sandbox edenc $ perl -v

This is perl 5, version 12, subversion 1 (v5.12.1) built for darwin-2level



-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/


More information about the SaoPaulo-pm mailing list