Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Perlplexation - foreach shoulda Known (Rosetta: Perl, Python, Ruby)

by eyepopslikeamosquito (Archbishop)
on Apr 13, 2012 at 21:51 UTC ( [id://965000]=note: print w/replies, xml ) Need Help??


in reply to Re: Perlplexation - foreach shoulda Known
in thread Perlplexation - foreach shoulda Known

Is there a special variable that tracks what $i is tracking in that example?
Curiously, this is very easy in Python:
x = [ 'apple', 'banana', 'orange' ] for i, val in enumerate(x): print i, val
which prints:
0 apple 1 banana 2 orange
and fairly easy in Ruby:
x = [ 'apple', 'banana', 'orange' ] x.each_with_index { |val, i| print "#{i} #{val}\n" }
and I'm sure (need to wait for moritz to show me how) it's easy in Perl 6 too (probably via Array kv and/or pairs methods?).

I was hoping List::Util or List::MoreUtils might have something nice, but the best I could find is to use an iterator like so:

use List::MoreUtils qw(each_array); my @x = ( 'apple', 'banana', 'orange' ); my $it = each_array( @{[0..$#x]}, @x ); while ( my ($i, $val) = $it->() ) { print "$i $val\n"; }
which is horrific. Is there a better way in List::Util or List::MoreUtils that I missed?

While I was writing this, chromatic showed how to do it in Perl 5.12 or above:

my @x = ( 'apple', 'banana', 'orange' ); while ( my ($i, $val) = each @x ) { print "$i $val\n"; }

Replies are listed 'Best First'.
Re^3: Perlplexation - foreach shoulda Known
by MonkOfAnotherSect (Sexton) on Apr 18, 2012 at 06:47 UTC
    eyepopslikeamosquito writes:
    Curiously, this is very easy in Python...
    And Riales's task too: remember -- slices win ;-)
    for elem in some_iterable[::3]: do_something(elem)
    Then again, I'd argue that it's really not so curious given how much iteration support/use/avoidance is baked-in (iterator and sequence protocols, generators, comprehensions, slices, etc).

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2025-07-16 13:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.