Мне нравится использовать тот факт, что strftime
нормализует дату для меня:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw/strftime/;
my $start = "2010/08/16";
my $end = "2010/09/16";
my @time = (0, 0, 0);
my ($y, $m, $d) = split "/", $start;
$y -= 1900;
$m--;
my $offset = 0;
while ((my $date = strftime "%Y/%m/%d", @time, $d + $offset, $m, $y) le $end) {
print "$date\n";
} continue {
$offset++;
}