Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Foreach Loops

by ikegami (Pope)
on Mar 15, 2005 at 18:58 UTC ( #439715=note: print w/ replies, xml ) Need Help??


in reply to Foreach Loops

You can do this, which is somewhat better.

for my $x (0..$#arr) { my $line = $arr[$x]; ## stuff goes here; }

It's even optimized to not create the list.


Comment on Re: Foreach Loops
Download Code
Re^2: Foreach Loops
by cog (Parson) on Mar 15, 2005 at 19:11 UTC
    And, of course, the previous line is available at $arr[$x - 1]

    (unless we're talking $x == 0)

      Well, if you consider arrays to be circular, if $x == 0, then $arr[$x - 1] is the last element. Which would be just right. Unfortunally, it doesn't work the way. $arr[$#arr + 1] isn't the same as $arr[0].
Re^2: Foreach Loops
by Anonymous Monk on Mar 16, 2005 at 15:16 UTC
    You say that for my $x (0 .. $#arr) is "better" than for (my $x = 0; $x < @arr; $x ++). Now, I don't care much what you find better, but since you have a preference that you find important enough to advocate, I'm interested in why you find your preference "better".
    It's even optimized to not create the list.
    Yeah, because it's special cased. The C-style loop doesn't create a list at all, and is even "optimized" in older versions of Perl.
      I'm interested in why you find your preference "better".

      The OP asked for something Perl-ish, so anything more Perl-ish than the C-ish code he provided is better in this context. Since C doesn't have the .. operator, this qualifies.

      I also think it's more readable. Instead of having to deal with three expressions, three operators and a keyword inside for's parens, the solution I presented has one operator. The iterator's decleration is even sperated from the bounds for extra readability.

      Yeah, because it's special cased. The C-style loop doesn't create a list at all, and is even "optimized" in older versions of Perl.

      My point was that the performance isn't any worse than the C version, contrary to what I once thought, and contrary to what many probably think.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://439715]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2014-10-25 04:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (141 votes), past polls