use warnings; use strict; use DateTime; my $year = 2017; for my $month (1..12) { my $dt = DateTime->new(year=>$year,month=>$month); print "_"x9,$dt->strftime(" %b %Y "),"_"x9,"\n"; my $prevweek=-1; while ($dt->month==$month) { my $week = $dt->week_of_month(); print $prevweek<0?'':"\n", "Week ",$week+1,":" if $week != $prevweek; printf " %02d", $dt->day; $prevweek=$week; $dt->add(days=>1); } print "\n"; }