There are a pile of Date manipulation modules available for Perl. The big hammer is Date::Manip. Possibly the way to validate your date string is first to chop it up assuming that the format is correct:
if ($yyyymmdd !~ /(\d{4})(\d\d)(\d\d)/) {
print "Bad data string provided: $yyyymmdd\n";
return 0;
}
my ($year, $month, $day) = ($1, $2, $3);
...
You can then check that the year, month and day are within the expected ranges and finally validate the full date by using Date::Manip.
DWIM is Perl's answer to Gödel