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";
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.