Implementing a Circular List

Problem

You want to create and manipulate a circular list.

Solution

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

Procedure

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

Discussion

Circular lists are commonly used to repeatedly process things in order; for example, connections to a server. The code shown above 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;
}

See Also

The unshift and push functions in perlfunc (1) and of Perl Developing;