note
eyepopslikeamosquito
<P>
<blockquote>
<I>
Is there a special variable that tracks what $i is tracking in that example?
</I>
</blockquote>
Curiously, this is very easy in Python:
<CODE>
x = [ 'apple', 'banana', 'orange' ]
for i, val in enumerate(x): print i, val
</CODE>
which prints:
<CODE>
0 apple
1 banana
2 orange
</CODE>
and fairly easy in Ruby:
<CODE>
x = [ 'apple', 'banana', 'orange' ]
x.each_with_index { |val, i| print "#{i} #{val}\n" }
</CODE>
and I'm sure (need to wait for [moritz] to show me how) it's
easy in Perl 6 too (probably via Array <C>kv</C> and/or <C>pairs</C> methods?).
</P>
<P>
I was hoping [doc://List::Util] or [cpan://List::MoreUtils]
might have something nice, but the best I could find is
to use an iterator like so:
<CODE>
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";
}
</CODE>
which is horrific.
Is there a better way in [doc://List::Util] or [cpan://List::MoreUtils]
that I missed?
</P>
<P>
While I was writing this, [chromatic] showed how
to do it in Perl 5.12 or above:
<CODE>
my @x = ( 'apple', 'banana', 'orange' );
while ( my ($i, $val) = each @x ) {
print "$i $val\n";
}
</CODE>
</P>
964975
964980