How can I convert Perl one-liners into complete scripts?

前端 未结 6 808
旧巷少年郎
旧巷少年郎 2020-12-24 03:06

I find a lot of Perl one-liners online. Sometimes I want to convert these one-liners into a script, because otherwise I\'ll forget the syntax of the one-liner.

For e

6条回答
  •  孤独总比滥情好
    2020-12-24 03:56

    That one's really easy to store in a script!

    #! /usr/bin/perl -p
    s/(\d+)/localtime($1)/e
    

    The -e option introduces Perl code to be executed—which you might think of as a script on the command line—so drop it and stick the code in the body. Leave -p in the shebang (#!) line.

    In general, it's safest to stick to at most one "clump" of options in the shebang line. If you need more, you could always throw their equivalents inside a BEGIN {} block.

    Don't forget chmod +x ~/bin/nagiostime.pl

    You could get a little fancier and embed the tail part too:

    #! /usr/bin/perl -p
    
    BEGIN {
      die "Usage: $0 [ nagios-log ]\n" if @ARGV > 1;
      my $log = @ARGV ? shift : "/var/log/nagios/nagios.log";
      @ARGV = ("tail -f '$log' |");
    }
    
    s/(\d+)/localtime($1)/e
    

    This works because the code written for you by -p uses Perl's "magic" (2-argument) open that processes pipes specially.

    With no arguments, it transforms nagios.log, but you can also specify a different log file, e.g.,

    $ ~/bin/nagiostime.pl /tmp/other-nagios.log

提交回复
热议问题