誕生日を指定すると、現時点の年齢を算出し、返します。
■ サブルーチン名
GetAge
■ 引数
誕生日となる日付を西暦、月、日に分けて指定します。
- 西暦(1900 〜 2023)
- 月(1 〜 12)
- 日(1 〜 31)
■ 戻値
- 現時点の年齢(数え年ではありません。)
■ 使い方
今日が西暦2002 年 3 月 25 日とします。誕生日が 西暦 1971 年 3 月 28 日として現時点での年齢を算出する場合には、
$age = &GetAge(1971, 3, 28); とします。$age には、30 が与えられます。このサブルーチンは、時間を見ていませんので、もし今日が誕生日と同日の西暦 2002 年 3 月 28 日だとすると、$age には、31 が与えられます。
指定する誕生日は、西暦 1900 年 1 月 1 日からご利用になる日までです。もし、誕生日に未来の日付を指定した場合には、マイナスの値が返ってきます。また、不適切な引数を与えると、何も返りません。
■ サブルーチン
sub GetAge {
my($birth_year, $birth_mon, $birth_day) = @_;
unless($birth_year && $birth_mon && $birth_day) {return '';}
if($birth_year =~ /[^0-9]/) {return '';}
if($birth_mon =~ /[^0-9]/) {return '';}
if($birth_day =~ /[^0-9]/) {return '';}
if($birth_year < 1900 || $birth_year > 2023) {return '';}
if($birth_mon < 1 || $birth_mon > 12) {return '';}
if($birth_day < 1 || $birth_day > 31) {return '';}
my($s, $m, $h, $D, $M, $Y) = localtime(time);
my $age = $Y + 1900 - $birth_year;
if($M+1 < $birth_mon || ($M+1 == $birth_mon && $D < $birth_day) ) {
$age --;
}
return $age;
}
|