Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
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 chanting in the Monastery: (6)
As of 2022-06-29 10:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My most frequent journeys are powered by:









    Results (96 votes). Check out past polls.

    Notices?