3.1.3. 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 2003 03 06
To 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 2003-03-06
The 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 temporary variables is:
printf("The current date is %04d-%02d-%02d\n",
sub {($_[5]+1900, $_[4]+1, $_[3])}->(localtime));