Recipe 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



Perl Cookbook
Perl Cookbook, Second Edition
ISBN: 0596003137
EAN: 2147483647
Year: 2003
Pages: 501

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net