NAME
   Schedule::ByClock - Give back the control to the caller at given
   times.

SYNOPSIS
      use Schedule::ByClock;

      # Constructor
      $th = Schedule::ByClock->new([time [,time [,...]]);

      # Methods
      @times = $th->set_control_list([time [,time [,...]]);
      @times = $th->get_control_list();

      $second = $th->get_control_on_second([second [,second [,...]]);
      $minute = $th->get_control_on_minute([minute [,minute [,...]]);

      $version = $th->get_version();

DEPENDENCIES
   Schedule::ByClock use the Time::localtime module.

DESCRIPTION
   This module implements an 'intelligent' (?) layer over sleep().
   Call the module when you want to sleep to a given second in the
   minute, or to a given minute in the hour, without having to
   calculate how long to wait.

   Use with multiple 'time' values to sleep until the
   chronologically first 'time' in the list.

   Note that all times used in Schedule::ByClock are calculated
   from the local time in the computer where Schedule::ByClock is
   executed.

USAGE
   Assume that you want to do something repeatedly every minute,
   when the seconds show for instance 34.

   Assume that you want to do something (maybe just once) the next
   time the seconds in the computer shows 23. Assume that 'now' is
   18. You would need to use sleep and to calculate how many
   seconds there are from 'now' till 23. Easy, 23 - 18 = 5.
   sleep(5); Then, assume that 'now' is 28. I.e. 23 - 28 = 55.
   (Huh?)

   Assume that you want to do something repeatedly, when the
   seconds show either 12 or 45 or 55, whichever comes first
   compared to 'now'. Assume that 'now' is 56. You would have to
   find out if it's 12, 45 or 55 that comes 'after' 56. Then you
   would have to calculate 12 - 56 = 16. (Right?)

   Assume that you don't want to wait for seconds, but for minutes
   instead. Sleep until the minutes in the hour are either 23, 55
   or 59.

   You should have got the picture by now. (Or I have failed. :-)

EXAMPLES
   Constructor
       All examples below use this constructor.

       $th = Schedule::ByClock->new(12,8,55); # Constructor with
       three 'time' values.

   Example 1
       At 09:09:24, you call:

       $rc = $th->get_control_on_second(); # This will return at
       09:09:55.

   Example 2
       $rc = $th->set_control_list(23);

       At 09:09:24, you call:

       $rc = $th->get_control_on_second(); # This will return at
       09:10:23.

   Example 3
       $rc = $th->set_control_list(); # Note! Empty list.

       At 09:09:24, you call:

       $rc = $th->get_control_on_second(); # This will return
       immediately (with return value undef).

       At 09:09:25, you call:

       $rc = $th->get_control_on_second(12); # This will return at
       09:10:12.

       At 09:09:25, you call:

       $rc = $th->get_control_on_minute(12); # This will return at
       09:12:00. <= Note the minutes.

   Example 4
       At 09:09:55, you call:

       $rc = $th->get_control_on_second(); # This will return at
       09:10:55, one minute later.

CONSTRUCTOR
   $th = Schedule::ByClock->new([time [,time [...]])
       Constructs a new ByClock object with an optional list of
       'times' for pre-programmed returns.

       Any 'time' that is not within the range 0 - 59 will be
       ignored and a warning (carp) will be written to the
       terminal.

METHODS
   @times = $th->set_control_list([time [,time [,...]]);
       Store a list of 'times' in the ByClock object to be used in
       future calls to get_control_on_second() and/or
       get_control_on_minute(), overriding the old list (if any).
       Any 'time' that is not within the range 0 - 59 will be
       ignored and a warning (carp) will be written to the
       terminal. If no 'times' are given (no parameters), then the
       internally stored list of 'times' will be cleared. Returns
       the newly stored list of 'times'.

   @times = $th->get_control_list();
       Returns a list of 'times' currently stored in the ByClock
       object.

   $second = $th->get_control_on_second();
       Sleep and return control to the caller at the
       chronologically first second in the pre-programmed list of
       'times'. Returns the second that corresponds to the return.
       If the internal list of seconds is empty the call will
       immediately return undef.

   $minute = $th->get_control_on_minute();
       Sleep and return control to the caller at the
       chronologically first minute in the pre-programmed list of
       'times'. The call will return in the first second ('00') of
       the requested minute. Returns the minute that corresponds to
       the return. If the internal list of times is empty the call
       will immediately return undef.

   $second = $th->get_control_on_second(second [,second [,...]);
       Sleep and return control to the caller at the
       chronologically first second in the provided list of
       'seconds'. This call will ignore the internally stored list
       of times (if any). Returns the second that corresponds to
       the return.

   $minute = $th->get_control_on_minute(minute [,minute [,...]);
       Sleep and return control to the caller at the
       chronologically first minute in the provided list of
       'minutes'. This call will ignore the internally stored list
       of times (if any). Returns the minute that corresponds to
       the return.

   $version = $th->get_version();
       Returns the current version of Schedule::ByClock.

AUTHOR
   Gustav Schaffter <[email protected]>

   http://www.schaffter.com

COPYRIGHT
   Copyright (c) 1999 and 2000, Gustav Schaffter. All rights
   reserved. This program is free software; you can redistribute it
   and/or modify it under the same terms as Perl itself.