Я бы, вероятно, сделал это с DateTime очень похоже на решение Алана.Но интересно посмотреть, как вы могли бы сделать это, используя встроенные средства Perl для обработки дат.
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
use Time::Local;
my $ONE_DAY = 24 * 60 * 60;
my $ONE_WEEK = 7 * $ONE_DAY;
my $year = shift || 2010;
# Get Jan 1st
my $date = timelocal 0, 0, 0, 1, 0, $year - 1900;
# Get first monday
until (strftime('%a', localtime $date) eq 'Mon') {
$date += $ONE_DAY;
}
while (strftime('%Y', localtime $date) == $year) {
print strftime('%Y%m%d', localtime $date), "\n";
$date += $ONE_WEEK;
}