in reply to dates and holidays

Keep a list of holidays days by day-of-the year, rather than month/day (you could even do it by epoc time instead). Here is some code that might help:
use warnings; use strict; use POSIX; my $yday = (localtime())[7]; print "Today is $yday\n"; my $mday = 25; my $month = 12; my $year = 2010; my $time_t = POSIX::mktime(0, 0, 0, $mday-1, $month-1, $year-1900); my $cday = (localtime($time_t))[7]; print "Christmas day 2010 is day $cday\n";
You can still store these day numbers as a hash key (with an undef value).