In the input we get dates like this 2010-7-5 but we would like to make sure we have two digits for both days and months: 2010-07-05

examples/regex/date.pl
#!/usr/bin/perl
use strict;
use warnings;

sub fix_date {
    my $str = shift;
    $str =~ s/-(\d)\b/-0$1/g;
    return $str;
}


my %dates = (
    '2010-7-5'   => '2010-07-05',
    '2010-07-5'  => '2010-07-05',
    '2010-07-05' => '2010-07-05',
    '2010-7-15'  => '2010-07-15',
);

use Test::More;
plan tests => scalar keys %dates;

foreach my $in (sort keys %dates) {
    my $result = fix_date($in);

    is $result, $dates{$in}, $in;

#    print  "      old: $in\n";
#    print  "      new: $result\n";
#    print  " expected: $dates{$in}\n\n";
}

examples/regex/date.out
      old: 2010-07-05  
      new: 2010-07-05
 expected: 2010-07-05

      old: 2010-07-5   
      new: 2010-07-05
 expected: 2010-07-05

      old: 2010-7-15   
      new: 2010-07-15
 expected: 2010-07-15

      old: 2010-7-5    
      new: 2010-07-05
 expected: 2010-07-05

examples/regex/date2.out
1..4
ok 1 - 2010-07-05
ok 2 - 2010-07-5
ok 3 - 2010-7-15
ok 4 - 2010-7-5
examples/regex/date3.out
date.pl .. ok
All tests successful.
Files=1, Tests=4,  0 wallclock secs ( 0.05 usr +  0.00 sys =  0.05 CPU)
Result: PASS