# Recipe 4.6 Iterating Over an Array by Reference

#### 4.6.1 Problem

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

#### 4.6.2 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]
}```

#### 4.6.3 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. 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";
}```

perlref(1) and perllol(1); Chapter 8 of Programming Perl; Recipe 11.1; Recipe 4.5

 Chapter 1. Strings
 Chapter 2. Numbers
 Chapter 3. Dates and Times
 Chapter 5. Hashes
 Chapter 6. Pattern Matching
 Chapter 7. File Access
 Chapter 8. File Contents
 Chapter 9. Directories
 Chapter 10. Subroutines
 Chapter 11. References and Records
 Chapter 12. Packages, Libraries, and Modules
 Chapter 13. Classes, Objects, and Ties
 Chapter 14. Database Access
 Chapter 15. Interactivity
 Chapter 16. Process Management and Communication
 Chapter 17. Sockets
 Chapter 18. Internet Services
 Chapter 19. CGI Programming
 Chapter 20. Web Automation
 Chapter 21. mod_perl
 Chapter 22. XML