package HTML::CalendarMonth::DateTool::Cal; { $HTML::CalendarMonth::DateTool::Cal::VERSION = '1.26'; } # Interface to unix 'cal' command use strict; use warnings; use Carp; use base qw( HTML::CalendarMonth::DateTool ); sub dow1st_and_lastday { my($self, $month, $year) = @_; $month ||= $self->month; $year ||= $self->year; my $cmd = $self->_cal_cmd or croak "cal command not found\n"; my @cal = grep(!/^\s*$/,`$cmd $month $year`); chomp @cal; my @days = grep(/\d+/,split(/\s+/,$cal[2])); my $dow1st = 6 - $#days; my($lastday) = $cal[$#cal] =~ /(\d+)\s*$/; # With dow1st and lastday, one builds a calendar sequentially. # Historically, in particular Sep 1752, days have been skipped. Here's # the chance to catch that. $self->_skips(undef); if ($month == 9 && $year == 1752) { my %skips; grep(++$skips{$_}, 3 .. 13); $self->_skips(\%skips); } ($dow1st, $lastday); } 1;