use Date::Calc qw/check_date/; my @date = $yyyymmdd =~ /^(\d{4})(\d{2})(\d{2})$/; die "ERROR: bad date '$yyymmdd'" unless check_date(@date); printf "Valid (y,m,d)=(%d,%d,%d)\n", @date;