Вы можете сделать это с помощью POSIX mktime
, но, очевидно, только если у вас достаточно гибкая реализация mktime
.
Что я делаю, так это вставляю числа, а затем использую местное время, чтобы вернуть их, и если я получу обратно значение того же дня, это действительное число. Итак, учитывая вашу строку:
my ( $y, $m, $d ) = split ' ', $date_string;
die "$date_string is not a valid date!"
unless ( $d == ( localtime mktime( 0, 0, 0, $d, $m - 1, $y - 1900 ))[3] )
;
Видите ли, в версиях mktime
, к которым я привык, mktime( 0, 0, 0, 30, 1, 112 )
будет составлять '2012-03-01'
и 30 != 1