Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Index of Items in Array using foreach loop

by default_user (Initiate)
on Feb 22, 2013 at 10:44 UTC ( #1020128=perlquestion: print w/ replies, xml ) Need Help??
default_user has asked for the wisdom of the Perl Monks concerning the following question:

In the following example I create an additional variable to keep track where I am in the array.
my @SampleArray = ("one","two","three" ); my $Arrayindex = 0; foreach my $ArrayItem ( @SampleArray ){ print $ArrayItem , ' is at location ' , $Arrayindex , ' in the arr +ay' , "\n"; $Arrayindex++; }
The question, is there a more efficient way to do this? I don't like having to use the $Arrayindex++; method to achieve this.

Comment on Index of Items in Array using foreach loop
Select or Download Code
Re: Index of Items in Array using foreach loop
by tmharish (Friar) on Feb 22, 2013 at 10:48 UTC

    Yes - use the for loop:

    for( my $Arrayindex = 0; $Arrayindex <= ( $#SampleArray ); $Arrayindex +++ ) { print $SampleArray[ $Arrayindex ] , ' is at location ' , $Arr +ayindex , ' in the array' , "\n"; }
Re: Index of Items in Array using foreach loop
by tobyink (Abbot) on Feb 22, 2013 at 10:50 UTC

    Don't loop through the array; loop through the indices!

    use strict; use warnings; my @SampleArray = ("one", "two", "three"); for my $ArrayIndex ( 0 .. $#SampleArray ) { printf( "%s is at location %d in the array\n", $SampleArray[$ArrayIndex], $ArrayIndex, ); }

    Or just use a sufficiently modern version of Perl...

    use v5.12; use strict; use warnings; my @SampleArray = ("one", "two", "three"); while (my ($ArrayIndex, $ArrayItem) = each @SampleArray) { printf( "%s is at location %d in the array\n", $ArrayItem, $ArrayIndex, ); }

    Update: Although each @array was only added to Perl as of 5.12, Array::Each::Override provides a working implementation of each @array for Perl going back to 5.8.

    package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1020128]
Front-paged by Arunbear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2014-08-29 18:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (286 votes), past polls