sub isValidDate{
local($year, $mon, $day) =@_;
# $year 4桁の西暦
# $mon 月を表す1〜12の整数
# $day 日付
# 簡単なチェック
return 0 if $year < 1701 # 英では1700年は閏年。
|| $year > 9999 # まあここは適当に。
|| $day < 1
|| $day > 31;
# $monは間違っていたら以下の$lastdayが0になるのでチェック不要。
# その月の末日を計算(2行目は閏年の計算)
local($lastday) = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$mon - 1]
+ ($mon == 2 && ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0
));
# $day が $lastday 以下ならOK。
($day <= $lastday) ? 1 : 0;
}