Date::Calc (or, heaven forbid, Date::Manip) is probably
overkill since you only want age in years. All you really
want to know is whether the birthday has passed this year.
sub age {
# Assuming $birth_month is 0..11
my ($birth_day, $birth_month, $birth_year) = @_;
my ($day, $month, $year) = (localtime)[3..5];
$year += 1900;
my $age = $year - $birth_year;
$age-- unless sprintf("%02d%02d", $month, $day)
>= sprintf("%02d%02d", $birth_month, $birth_day);
return $age;
}
Of course, if you're only using this on a person's birthday,
all you need to do is subtract their birth year from the
current year :-) | [reply] [d/l] |
The above code is what I'd recommend using, as it's simple
enough that the use of modules isn't really needed.. Then
again I'm not a module-nazi:) One caveat about this code
though: The value returned to $month in the call to
localtime is 0 based, i.e. 0..11. I'm not sure if this
might contrast the format of the $birth_month that is
being passed in.. if so, just change the appropriate line
to read
$age-- unless sprintf("%02d%02d", $month+1, $day)
| [reply] [d/l] |
And just what is a module nazi?
| [reply] |
I don't think this code would work if the person was born before 1970.
T.R. Fullhart, kayos@kayos.org
| [reply] |
It even works if someone were born before 1900:
print age(8, 9, 1866), "\n";
Result: 133. See man localtime for details.
| [reply] [d/l] |