http://www.perlmonks.org?node_id=556236


in reply to Determining the dayname for the last day of any given month

Date::Calc's Day_of_Week function will do exactly what you want. I have the following snippet which I used once before when I could not install Date::Calc. Unfortunately I did not record it's provenance and I googled around and couldn't find it :( I seem to recall it coming from one of our esteemed monks though...

# Return the day (1..7) that the first day of the given month/year fal +ls # on. Uses "Zeller's Confluence", which I don't claim to understand. # sub Day_of_Week { my($year, $month, $day) = @_; # $month in (1..12), $year as YYYY $month-=1; if ( $month < 2 ) { $month += 12; --$year; } my $z1 = (26 * ($month + 2)) / 10; my $z2 = int((125 * $year) / 100); my $day_of_week = ($z1 + $z2 - int($year / 100) + int($year / 400)) +% 7; return $day_of_week ? $day_of_week : 7; }

It would need a wrapper to do what you want, subtract one (previous day) and wrap to seven if result zero...

--
Do not seek to follow in the footsteps of the wise. Seek what they sought. -Basho