Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

one liner automagic strftime()

by seki (Scribe)
on Aug 22, 2017 at 12:33 UTC ( #1197796=perlquestion: print w/replies, xml ) Need Help??

seki has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks!

I use often the localtime() / strftime() couple, but while looking at my collection of one-liners tools, I am puzzled by an epoch translator that displays local time without specifying a format.

If I eval the following code,

perl -le'print localtime 1503403724'

the result is not surprisingly

4481422711722331

but the following command line filter

echo 1503403724 | perl -pe's/([\d.]+)/localtime $1/e;'

displays the formated

Tue Aug 22 14:08:44 2017

Is there some untold magic with the inline loop parameter, or with the executable regex?

For the record, the onle-liner is originaly used to translate some log files with a time-stamp on each line in the form of an epoch date instead of a readable date format. Example:

cat var/nagios.log | perl -pe's/([\d.]+)/localtime $1/e;' | less
The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Replies are listed 'Best First'.
Re: one liner automagic strftime()
by hdb (Monsignor) on Aug 22, 2017 at 13:07 UTC

    In the substitution operator the right hand side is evaluated in scalar context and thus localtime returns the formatted date as a string as per documentation:

    use strict; use warnings; my @x = localtime 1503403724; print "@x\n"; my $x = localtime 1503403724; print "$x\n"; my $z = "ccc"; $z =~ s/ccc/wantarray()?"list":"scalar"/e; print "$z\n";

      Arf. So no magic, just the list / scalar context. I have always missed that paragraph of the localtime() perldoc... Thanks.

      The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

        Difficult to say as "Any sufficiently advanced technology is indistinguishable from magic." (Arthur C. Clarke)

        Perl surely falls into that category...

Re: one liner automagic strftime()
by Laurent_R (Canon) on Aug 22, 2017 at 22:04 UTC
    Try this:
    $ perl -le'print scalar localtime 1503403724' Tue Aug 22 14:08:44 2017

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1197796]
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (2)
As of 2022-07-05 00:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?