in reply to Time::Piece strangeness
suggests that this behaviour is an intended feature. It also suggests a way that you can verify dates:my $t = Time::Piece->strptime("Sun 3rd Nov, 1943", "%A %drd %b, %Y"); print $t->strftime("%a, %d %b %Y"); Outputs: Wed, 03 Nov 1943 (see, it's even smart enough to fix my obvious date bug)
which leads to:use strict; use warnings; use Time::Piece; my $format = "%d-%m-%Y"; while (my $date = <DATA>) { chomp $date; printf("%s %s legitimate\n", $date, (verify_date($date, $format) ? "is" : "is not"), ); } sub verify_date { my ($date_in, $format) = @_; my $t = Time::Piece->strptime($date_in, $format); my $date_out = $t->strftime($format); return $date_in eq $date_out ? 1 : 0; } __DATA__ 28-02-2004 29-02-2004 30-02-2004 28-02-2006 29-02-2006 30-02-2006
28-02-2004 is legitimate 29-02-2004 is legitimate 30-02-2004 is not legitimate 28-02-2006 is legitimate 29-02-2006 is not legitimate 30-02-2006 is not legitimate
|
|---|