The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


List::Cycle - Objects for cycling through a list of values


Version 1.04


List::Cycle gives you an iterator object for cycling through a series of values. The canonical use is for cycling through a list of colors for alternating bands of color on a report.

    use List::Cycle;

    my $colors = List::Cycle->new( {values => ['#000000', '#FAFAFA', '#BADDAD']} );
    print $colors->next; # #000000
    print $colors->next; # #FAFAFA
    print $colors->next; # #BADDAD
    print $colors->next; # #000000
    print $colors->next; # #FAFAFA
    ... etc ...

You'd call it at the top of a loop:

    while ( ... ) {
        my $color = $colors->next;
        print qq{<tr bgcolor="$color">;

Note that a List::Cycle object is not a standard Perl blessed hash. It's an inside-out object, as suggested in Perl Best Practices. In the seven years since PBP has come out, inside-out objects have been almost universally ignored, but I keep List::Cycle as an example. If you don't care about the internals of the object, then List::Cycle is a fine module for you to use.


new( {values => \@values} )

Creates a new cycle object, using @values.

The values keyword can be vals, if you like.


Sets the cycle values and resets the internal pointer.


Sets the internal pointer back to the beginning of the cycle.

    my $color = List::Cycle->new( {values => [qw(red white blue)]} );
    print $color->next; # red
    print $color->next; # white
    print $color->next; # red, not blue


Returns a handy string representation of internals.


Gives the next value in the sequence.


Andy Lester, <andy at>


You can find documentation for this module with the perldoc command.

    perldoc List::Cycle

You can also look for information at:


Please report any bugs or feature requests at


List::Cycle is a playground that uses some of the ideas in Damian Conway's marvelous Perl Best Practices. One of the chapters mentions a mythical List::Cycle module, so I made it real.

Thanks also to Ricardo SIGNES and Todd Rinaldo for patches.


Copyright 2005-2012 Andy Lester.

This program is free software; you can redistribute it and/or modify it under the terms of the Artistic License v2.0.