in reply to for ( ; ; ) vs for ( .. )

If you're using an older version of perl (before 5.005) the for(;;) way is more memory efficient, since it doesn't build a temporary list of integers from the start to end of your range.

Replies are listed 'Best First'.
Re: Re: for ( ; ; ) vs for ( .. )
by demerphq (Chancellor) on May 23, 2002 at 17:57 UTC
    Am I correct in understanding that the three argument for is actually converted into a while continue? With the added overhead of two scoped blocks?

    Yves / DeMerphq
    ---
    Writing a good benchmark isnt as easy as it might look.

      B::Deparse is your friend here.
      $ perl -MO=Deparse -e 'for ($x = 0; $x < 10; $x++) {}' $x = 0; while ($x < 10) { (); } continue { ++$x }
      So the answer would be yes. As to whether there's extra scope overhead, well, we'll leave that as an exercise for the reader.

        which version of perl? I can't seem to reproduce it... Mine is 5.6.1 on a solaris

        me@myhost> perl -MO=Deparse -e 'for( my $x = 0; $x < 10; $x++ ) { pr +int "foo\n" }' for (my $x = 0; $x < 10; ++$x) { print "foo\n"; } -e syntax OK me@myhost>

        B::Deparse is your friend here.

        Ah. Well. Coming from you I'll take your word for it. But frankly I tend not to trust B::Deparse too much. :-)

        D:\Development>perl -MO=Deparse -e "for ($x = 0; $x < 10; $x++) {}" for ($x = 0; $x < 10; ++$x) { (); } -e syntax OK D:\Development>perl -MO=Deparse,-x3 -e "for ($x = 0; $x < 10; $x++) { +}" $x = 0; while ($x < 10) { (); } continue { ++$x } -e syntax OK

        This is on 5.6.1 AS631. Btw from the documentation for the -x switch


          Expand conventional syntax constructions into equivalent ones that expose their internal operation. LEVEL should be a digit, with higher values meaning more expansion. As with -q, this actually involves turning off special cases in B::Deparse's normal operations.


        Which suggests to me that im right. (But which is also why I asked a Guru like yourself. I was hoping for a definitive answer that did not depend on Deparse.)

        Nevertheless, thanks.

        Yves / DeMerphq
        ---
        Writing a good benchmark isnt as easy as it might look.