Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^6: C-style for loop

by ikegami (Pope)
on Nov 16, 2008 at 01:42 UTC ( #723871=note: print w/replies, xml ) Need Help??


in reply to Re^5: C-style for loop
in thread C-style for loop

  • For for (X..Y), Perl uses a counting loop.
  • For for (reverse constX..constY), Perl builds a flattened list at compile-time and iterates over it in reverse.
  • For for (reverse X..Y), Perl builds a flattened list at run-time and iterates over it in reverse.

So far, I've found 6 different kinds of for loops in Perl. You can find them in an earlier node.

#!/usr/bin/perl -- use strict; use warnings; use Benchmark qw(cmpthese); my $BIG = 100_000; cmpthese(-3, { c_f => \&c_f, c_r => \&c_r, p_fv => \&p_fc, p_fc => \&p_fv, p_rc => \&p_rc, p_rv => \&p_rv, }); sub c_f { for (my $i = 0; $i < $BIG; $i++ ) { 1 } } sub c_r { for (my $i = $BIG; $i-- > 0; ) { 1 } } sub p_fc { for my $i ( 0..100_000-1 ) { 1 } } sub p_fv { for my $i ( 0..$BIG-1 ) { 1 } } sub p_rc { for my $i ( reverse 0..100_000-1 ) { 1 } } sub p_rv { for my $i ( reverse 0..$BIG-1 ) { 1 } } __END__ Rate p_rv c_r c_f p_rc p_fv p_fc p_rv 28.5/s -- -37% -44% -59% -64% -65% Builds list and loops. c_r 45.0/s 58% -- -11% -35% -44% -44% c_f 50.7/s 78% 13% -- -27% -37% -37% p_rc 69.7/s 144% 55% 37% -- -13% -14% Loops over pre-built array. p_fv 80.0/s 180% 78% 58% 15% -- -1% Counting loop p_fc 80.7/s 183% 79% 59% 16% 1% -- Counting loop

If you add "()," to the front of any of the lists, you'll notice that p_* will become as slow as p_rv.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://723871]
help
Chatterbox?
[Corion]: marto: Naah, my module doesn't care, but the users of my module might expect some things to work in Chrome that only work in later builds (or, as seems to be the case, don't work there either ;) )
[Corion]: But I really wonder - I can tell Chrome to go offline, but requesting pages over the network still succeeds. But if I manually click the "offline" checkbox, that's different :-/
[LanX]: Corion can you tell WMC to check the sub version number ?
LanX has to run

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (7)
As of 2017-12-12 20:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    What programming language do you hate the most?




















    Results (336 votes). Check out past polls.

    Notices?