Schedule::Week - Perl extension for creating and manipulating an hourly weekly schedule.
use Schedule::Week qw(:days); my $schedule = Schedule::Week->new(); # On for Mondays, Tuesdays, and Wednesdays, 9 AM to 9 PM for my $day ($MONDAY, $TUESDAY, $WEDNESDAY) { $schedule->hours_for_day($day, [9 ... 21], 1); } # Is right now a valid time within this schedule? print ($schedule->is_active(time())) ? "Yes\n" : "No\n"; # Get the states of all hours across all days, returns an array # of arrays .. index 1 is days indexed by number from 0 to 6 and # each element holds a reference to an array of the hours, from 0 # (midnight) to 11 PM (23). my @all_hours_all_days = $schedule->hours([0 ... 23]); # Is Monday at 11 AM included in this schedule? # $monday_hours[0] == 1 # # Returns an array # of results representing each hour passed in, indexed starting # at 0. my @monday_hours = $schedule->monday([11]); # returns 168 byte array representing 168 hours in the week my $serialized = $schedule->serialize(); # Restore to object from serialized form my $other_schedule = Schedule::Week::deserialize($serialized); # Reset the whole thing $other_schedule->reset(); # M T W TH F are weekdays - turn on 9 - 5 schedule for the week $other_schedule->weekday_hours([9 ... 17], 1); # Weekends we work 9 - 1 PM $other_schedule->weekend_hours([9 ... 13], 1); # Now kill 1 PM to 5 PM across all days $other_schedule->hours([13 ... 17], 0); # prints 168 byte array of 1s and 0s print $other_schedule->serialize(); # Reset the initial schedule to everything off $schedule->reset();
Module to make it easy to create a basic weekly schedule that includes limits on what days and hours the schedule is active during; schedule can be serialized into an easy to store format and you can quickly query a schedule to see if a given Unix time would be active within the schedule.
Please note that *all* hours in the schedule will be represented in the time zone the script is run in.
:days = $MONDAY, $TUESDAY, $WEDNESDAY, $THURSDAY, $FRIDAY, $SATURDAY, $SUNDAY You can request each day be exported individually as well. use Schedule::Week qw($SUNDAY $MONDAY);
Max Schubert, <max_schubert@cable.comcast.com<gt>
Copyright (C) 2009 by Max Schubert / Comcast
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.
To install Schedule::Week, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Schedule::Week
CPAN shell
perl -MCPAN -e shell install Schedule::Week
For more information on module installation, please visit the detailed CPAN module installation guide.