use strict; use warnings; use Time::Local; my @A = ( [25, 6, 1996 ], [31, 2, 2005 ], [29, 2, 2000 ], ); foreach my $dmy (@A) { my ($d, $m, $y) = @{$dmy}; print "invalid date: $d.$m.$y\n" unless eval { timelocal (0,0,0,$d,$m-1,$y-1900) }; }