NAME
    `Algorithm::Cron' - abstract implementation of the cron(8) scheduling
    algorithm

SYNOPSIS
     use Algorithm::Cron;

     my $cron = Algorithm::Cron->new(
        base => 'local',
        crontab => "*/10 9-17 * * *",
     );

     my $time = time;
     while(1) {
        $time = $cron->next_time( $time );

        sleep( time - $time );

        print "Do something\n";
     }

DESCRIPTION
    Objects in this class implement a time scheduling algorithm such as used
    by cron(8). Objects are stateless once constructed, and represent a
    single schedule as defined by a crontab(5) entry. The object implements
    a method `next_time' which returns an epoch timestamp value to indicate
    the next time included in the crontab schedule.

  Crontabs
    The schedule is provided as a set of acceptable values for each field of
    the broken-down time (as returned by `localtime' or `gmtime'), either in
    a single string called `crontab' or by a set of named strings, each
    taking the name of a crontab(5) field.

     my $cron = Algorithm::Cron->new(
        base => 'local',
        crontab => '0 9 * * mon-fri',
     );



     my $cron = Algorithm::Cron->new(
        base => 'local',
        min  => 0,
        hour => 9,
        wday => "mon-fri",
     );

    A `crontab' field containing a single asterisk (`*'), or a missing named
    field, indicates that any value here is included in the scheduled times.
    To restrict the schedule, a value or set of values can be provided. This
    should consist of one or more comma-separated numbers or ranges, where a
    range is given as the start and end points, both inclusive.

     hour => "3-6"
     hour => "3,4,5,6"

    Ranges can also be prefixed by a value to give the increment for values
    in that range.

     min => "*/10"
     min => "0,10,20,30,40,50"

    The `mon' and `wday' fields also allow symbolic month or weekday names
    in place of numeric values. These names are always in the C locale,
    regardless of the system's locale settings.

     mon => "mar-sep"

     wday => "mon,wed,fri"

    Specifying `sun' as the end of a `wday' range, or giving the numeric
    value of `7' is also supported.

     wday => "fri-sun"
     wday => "5-7"
     # Both equivalent to: wday => "0,5,6"

    As per cron(8) behaviour, this algorithm looks for a match of the `min',
    `hour' and `mon' fields, and at least one of the `mday' or `mday'
    fields. If both `mday' and `wday' are specified, a match of either will
    be sufficient.

    As an extension, seconds may be provided either by passing six
    space-separated fields in the `crontab' string, or as an additional
    `sec' field. If not provided it will default to `0'. If six fields are
    provided, the first gives the seconds.

  Time Base
    `Algorithm::Cron' supports using either UTC or the local timezone when
    comparing against the given schedule.

CONSTRUCTOR
  $cron = Algorithm::Cron->new( %args )
    Constructs a new `Algorithm::Cron' object representing the given
    schedule relative to the given time base. Takes the following named
    arguments:

    base => STRING
            Gives the time base used for scheduling. Either `utc' or
            `local'.

    crontab => STRING
            Gives the crontab schedule in 5 or 6 space-separated fields.

    sec => STRING, min => STRING, ... mon => STRING
            Optional. Gives the schedule in a set of individual fields, if
            the `crontab' field is not specified.

METHODS
  @seconds = $cron->sec
  @minutes = $cron->min
  @hours = $cron->hour
  @mdays = $cron->mday
  @months = $cron->mon
  @wdays = $cron->wday
    Accessors that return a list of the accepted values for each scheduling
    field. These are returned in a plain list of numbers, regardless of the
    form they were specified to the constructor.

    Also note that the list of valid months will be 0-based (in the range 0
    to 11) rather than 1-based, to match the values used by `localtime',
    `gmtime', `mktime' and `timegm'.

  $time = $cron->next_time( $start_time )
    Returns the next scheduled time, as an epoch timestamp, after the given
    timestamp. This is a stateless operation; it does not change any state
    stored by the `$cron' object.

AUTHOR
    Paul Evans <leonerd@leonerd.org.uk>

