I might be old-fashioned, but I think Time::Piece is overkill for this task:
sub usage { my $err = shift and select STDERR; say "usage: $0 YYYYMMDD [YYYYMMDD]"; exit $err; } # usage use Time::Local "timelocal_posix"; my $from = shift or usage (1); my $to = shift || do { my @d = localtime; (($d[5] + 1900) * 100 + $d[4] + 1) * 100 + $d[3 +] }; my ($y, $m, $d, $Y, $M, $D) = "$from:$to" =~ m{ ([1-9][0-9]{3}) -? (0[1-9]|1[0-2]) -? (0[1-9]|[12][0-9]|3[01]) : ([1-9][0-9]{3}) -? (0[1-9]|1[0-2]) -? (0[1-9]|[12][0-9]|3[01]) }x or usage (1); $from gt $to and usage (1); my @w = qw( Sun Mon Tue Wed Thu Fri Sat ); $to = timelocal_posix (0, 0, 13, $D, $M - 1, $Y - 1900); if ($d > 1) { $d = 1; $m++; } if ($m > 12) { $m = 1; $y++; } while (($from = timelocal_posix (0, 0, 12, $d, $m - 1, $y - 1900)) < $ +to) { my @d = localtime ($from); printf "%s %4d-%02d-%02d\n", $w[$d[6]], $d[5] + 1900, $d[4] + 1, $ +d[3]; if (++$m > 12) { $m = 1; $y++; } }
In reply to Re: RFC: List of first day of each month
by Tux
in thread RFC: List of first day of each month
by TieUpYourCamel
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |