Recipe 4.5. Iterating Over an Array by Reference
Author: Tom Christiansen & Nathan Torkington
Date: 1999-07-02T01:31:25Z

#

| Chapter 4 Arrays |

## 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

4.4. Doing Something with Every Element in a List |  | 4.6. Extracting Unique Elements from a List