NAME
List::Rotation - Loop (Cycle, Alternate or Toggle) through a list of values via a singleton object implemented as closure.
SYNOPSIS
use List::Rotation;
my @array = qw( A B C );
my $first_cycle = List::Rotation::Cycle->new(@array);
print $first_cycle->next; ## prints A
print $first_cycle->next; ## prints B
print $first_cycle->next; ## prints C
print $first_cycle->next; ## prints A, looping back to beginning
print $first_cycle->next; ## prints B
print $first_cycle->next; ## prints C
print $first_cycle->prev; ## prints B, going back
print $first_cycle->prev; ## prints A, going back
print $first_cycle->prev; ## prints C, looping forward to last
print $first_cycle->curr; ## prints C, at current position
my $second_cycle = List::Rotation::Cycle->new(@array); ## the same object is returned as above
$first_cycle->reset; ## reset position
print $first_cycle->next; ## prints A
print $second_cycle->next; ## prints B
print $first_cycle->next; ## prints C
print $second_cycle->next; ## prints A, looping back to beginning
my $alternation = List::Rotation::Alternate->new( qw( odd even ) );
print $alternation->next; ## prints odd
print $alternation->next; ## prints even
print $alternation->next; ## prints odd
$alternation->reset; ## reset the alternation to first item
print $alternation->next; ## prints odd
my $switch = List::Rotation::Toggle->new;
## prints even numbers between 2 and 10
foreach ( 2..10 ) {
print "$_\n" if $switch->next;
}
DESCRIPTION
Use List::Rotation
to loop through a list of values. Once you get to the end of the list, you go back to the beginning. Alternatively you can walk backwards through your list of values.
List::Rotation
is implemented as a Singleton Pattern. You always just get 1 (the very same) Rotation object if you use the new
method several times with the exact same set of parameters. This is done by using Memoize
on the new
method. It returns the same object for every use of new
that comes with the same list of parameters.
The class List::Rotation
contains three subclasses:
List::Rotation::Cycle
-
Loop through a list of arbitrary values. The list must not be empty.
List::Rotation::Alternate
-
Alternate two values.
List::Rotation::Toggle
-
Toggle between true and false.
OBJECT METHODS
- new
-
Create a Cycle object for the list of values in the list.
- next
-
Return the next element.
- prev
-
Return the previous element.
- curr
-
Return the element at the current position.
- reset
-
Reset the list to the beginning; the following call of
next
will return the first item of the list again.
References
There are several similar modules available:
Tie::FlipFlop
-
by Abigail: Alternate between two values.
List::Cycle
-
by Andi Lester: Objects for cycling through a list of values
Tie::Cycle
-
by Brian D. Foy: Cycle through a list of values via a scalar.
Tie::Toggle
-
by Brian D. Foy: False and true, alternately, ad infinitum.
AUTHOR
Imre Saling, <pelagicatcpandotorg>
COPYRIGHT and LICENSE
Copyright 2010, Imre Saling, All rights reserved.
This software is available under the same terms as perl.