Reversing an Array (Perl Cookbook, 2nd Edition)

## 4.11. Reversing an Array

### 4.11.1. Problem

You want to reverse an array.

### 4.11.2. Solution

Use the `reverse` function:

>     # reverse @ARRAY into @REVERSED
>     @REVERSED = reverse @ARRAY;

Or process with a `foreach` loop on a reversed list:

>     foreach $element (reverse @ARRAY) {
>         # do something with $element
>     }

Or use a `for` loop, starting with the index of the last element and working your way down:

>     for ($i = $#ARRAY; $i >= 0; $i--) {
>         # do something with $ARRAY[$i]
>     }

### 4.11.3. Discussion

Called in list context, the `reverse` function reverses elements of its argument list. You can save a copy of that reversed list into an array, or just use `foreach` to walk through it directly if that's all you need. The `for` loop processes the array elements in reverse order by using explicit indices. If you don't need a reversed copy of the array, the `for` loop can save memory and time on very large arrays.

If you're using `reverse` to reverse a list that you just sorted, you should have sorted it in the correct order to begin with. For example:

>     # two-step: sort then reverse
>     @ascending = sort { $a cmp $b } @users;
>     @descending = reverse @ascending;

>     # one-step: sort with reverse comparison
>     @descending = sort { $b cmp $a } @users;

### 4.11.4. See Also

The `reverse` function in perlfunc(1) and Chapter 29 of Programming Perl; we use `reverse` in Recipe 1.7

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