Finding Today’s Date
Problem
You need to find the year, month, and day values for today’s date.
Solution
Use localtime, which returns values for the
current date and time if given no arguments. You can either use
localtime and extract the information you want
from the list it returns:
($DAY, $MONTH, $YEAR) = (localtime)[3,4,5];
Or, use Time::localtime, which overrides localtime
to return a Time::tm object:
use Time::localtime; $tm = localtime; ($DAY, $MONTH, $YEAR) = ($tm->mday, $tm->mon, $tm->year);
Discussion
Here’s how you’d print the current date as
“YYYY-MM-DD,” using the non-overridden
localtime:
($day, $month, $year) = (localtime)[3,4,5];
printf("The current date is %04d %02d %02d\n", $year+1900, $month+1, $day);
The current date is 1998 04 28To extract the fields we want from the list returned by
localtime, we take a list slice. We could also
have written it as:
($day, $month, $year) = (localtime)[3..5];
This is how we’d print the current date as “YYYY-MM-DD” (in approved ISO 8601 fashion), using Time::localtime:
use Time::localtime;
$tm = localtime;
printf("The current date is %04d-%02d-%02d\n", $tm->year+1900,
($tm->mon)+1, $tm->mday);
The current date is 1998-04-28The object interface might look out of place in a short program. However, when you do a lot of work with the distinct values, accessing them by name makes code much easier to understand.
A more obfuscated way that does not involve introducing temporary variables is:
printf("The current date is %04d-%02d-%02d\n", sub {($_[5]+1900, ...