my $start_date = "2005-07-12"; my $end_date = "2005-08-03"; use Date::Calc qw/Delta_Days Add_Delta_Days check_date/; my @start_date = split /-/, $start_date; my @end_date = split /-/, $end_date; die "Bad start date" unless check_date(@start_date); die "Bad end date" unless check_date(@end_date); die "bad order" unless Delta_Days(@start_date, @end_date) >= 0; my @d = @start_date; while( Delta_Days(@d, @end_date) >= 0 ){ printf "%04d-%02d-%02d\n", @d; @d = Add_Delta_Days(@d, 1); }