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";
}