#!/usr/bin/perl use warnings; use strict; sub is_leap_year { ( $_[0] % 4 == 0 ) && ( $_[0] % 100 != 0 ) || ( $_[0] % 400 == 0 ) } sub end_of_month { my ( $yr, $mn ) = @_; return is_leap_year( $yr ) ? 29 : 28 if $mn == 2; return 30 if $mn == 4 || $mn == 6 || $mn == 9 || $mn == 11; return 31; } for my $year ( 1896 .. 2009 ) { for my $month ( 1 .. 12 ) { for my $day ( 1 .. end_of_month( $year, $month ) ) { printf "%04d%02d%02d\n", $year, $month, $day; } } }