start page | rating of books | rating of authors | reviews | copyrights

Perl Cookbook

Perl CookbookSearch this book
Previous: 4.4. Doing Something with Every Element in a List Chapter 4
Arrays
Next: 4.6. Extracting Unique Elements from a List
 

4.5. Iterating Over an Array by Reference

Problem

You have a reference to an array, and you want to use foreach to work with the array's elements.

Solution

Use foreach or for to loop over the dereferenced array:

# iterate over elements of array in $ARRAYREF foreach $item (@$ARRAYREF) {     # do something with $item }  for ($i = 0; $i <= $#$ARRAYREF; $i++) {     # do something with $ARRAYREF->[$i] }

Discussion

The solutions assume you have a scalar variable containing the array reference. This lets you do things like this:

@fruits = ( "Apple", "Blackberry" ); $fruit_ref = \@fruits; foreach $fruit (@$fruit_ref) {     print "$fruit tastes good in a pie.\n"; } 



Apple tastes good in a pie.



 



Blackberry tastes good in a pie.



We could have rewritten the foreach loop as a for loop like this:

for ($i=0; $i <= $#$fruit_ref; $i++) {     print "$fruit_ref->[$i] tastes good in a pie.\n"; }

Frequently, though, the array reference is the result of a more complex expression. You need to use the @{ EXPR } notation to turn the result of the expression back into an array:

$namelist{felines} = \@rogue_cats; foreach $cat ( @{ $namelist{felines} } ) {     print "$cat purrs hypnotically..\n"; } print "--More--\nYou are controlled.\n";

Again, we can replace the foreach with a for loop:

for ($i=0; $i <= $#{ $namelist{felines} }; $i++) {     print "$namelist{felines}[$i] purrs hypnotically.\n"; }

See Also

perlref (1) and perllol (1); Chapter 4 of Programming Perl ; Recipe 11.1 ; Recipe 4.4


Previous: 4.4. Doing Something with Every Element in a List Perl Cookbook Next: 4.6. Extracting Unique Elements from a List
4.4. Doing Something with Every Element in a List Book Index 4.6. Extracting Unique Elements from a List

Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.