Implementing a Circular List (Perl Cookbook, 2nd Edition)

## 4.17. Implementing a Circular List

### 4.17.1. Problem

You want to create and manipulate a circular list.

### 4.17.2. Solution

Use `unshift` and `pop` (or `push` and `shift`) on a normal array.

### 4.17.3. Procedure

>     unshift(@circular, pop(@circular));  # the last shall be first
>     push(@circular, shift(@circular));   # and vice versa

### 4.17.4. Discussion

Circular lists are commonly used to repeatedly process things in order; for example, connections to a server. The code shown previously isn't a true computer science circular list, with pointers and true circularity. Instead, the operations provide for moving the last element to the first position, and vice versa.

>     sub grab_and_rotate ( \@ ) {
>         my $listref = shift;
>         my $element = $listref->[0];
>         push(@$listref, shift @$listref);
>         return $element;
>     }

>     @processes = ( 1, 2, 3, 4, 5 );
>     while (1) {
>         $process = grab_and_rotate(@processes);
>         print "Handling process $process\n";
>         sleep 1;
>     }

### 4.17.5. See Also

The `unshift` and `push` functions in perlfunc(1) and Chapter 29 of Programming Perl; Recipe 13.13

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