Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
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 browsing the Monastery: (8)
As of 2015-07-01 23:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls