ForgotPasswordAgain has asked for the wisdom of the Perl Monks concerning the following question:
It's annoying to use localtime. By default its output is kind of useless
perl -le 'print join(",", @{[localtime]}[5,4,3,2,1,0])' 106,6,18,15,22,52
You have to add some extra statements to put it into more readable form:
perl -le '@_=localtime; print sprintf("%4d-%02d-%02d %02d:%02d:%02d", $_[5]+1900, $_[4]+1, @_[3,2,1,0])' 2006-07-18 15:57:36
But I'm wondering if there's a more compact way to do it (can be obfuscated), in one statement. Without cheating. For example:
perl -le'print join(",", (@_=@{[localtime]}[5,4,3,2,1,0]) && ($_[0]+1900, $_[1]+1, @_[2..5]))'
is obviously cheating, since the assignment and && basically make it into two statements (technically, no - but do you see the "spirit" of what I'm saying?). Can you do like a map on items in a list? I have something like this (non-working) in mind:
@t = (+ 1900, + 1, , , , ) = @{[localtime]}[reverse 0..5];
I'm guessing not but thought I'd ask.
(tiny update: I had the order reversed in the last example)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: golfing on localtime
by davorg (Chancellor) on Jul 18, 2006 at 14:03 UTC | |
|
Re: golfing on localtime
by liverpole (Monsignor) on Jul 18, 2006 at 15:24 UTC | |
by ForgotPasswordAgain (Vicar) on Jul 19, 2006 at 08:26 UTC | |
|
Re: golfing on localtime
by Corion (Patriarch) on Jul 18, 2006 at 14:03 UTC | |
|
Re: golfing on localtime
by shmem (Chancellor) on Jul 18, 2006 at 15:22 UTC | |
|
Re: golfing on localtime
by explorer (Chaplain) on Jul 18, 2006 at 14:23 UTC | |
|
Re: golfing on localtime
by ForgotPasswordAgain (Vicar) on Jul 18, 2006 at 14:25 UTC | |
by Corion (Patriarch) on Jul 18, 2006 at 14:30 UTC |