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)
In reply to golfing on localtime by ForgotPasswordAgain
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |