I was pondering a hook that runs one script at an event (in git) and bemoaning that I had several scripts that I wanted to run for this hook and that there were other hooks that were similar but had different numbers of options and that run-parts had terrible syntax, and thought this would be so much easier in perl, so ...

#!/usr/bin/perl use warnings; use strict; system 'run-parts',$0.'.d', map {-a=>$_} @ARGV;

I'm thinking about removing the use statements to make it faster, but I haven't bothered yet.

Comment on One line dynamic run-parts warpper
Download Code
Re: One line dynamic run-parts warpper
by ww (Bishop) on Dec 16, 2013 at 22:48 UTC
    Before removing the pragmas, benchmark! The received wisdom is: "Removing strict and warnings is unlikely to contribute significantly (parts per m, maybe) to 'making it faster.'"
    If I've misconstrued your question or the logic needed to answer it, I offer my apologies to all those electrons which were inconvenienced by the creation of this post.

      Given the following script:

      use strict; use warnings; 1;

      Commenting out the pragmas, it seems to run in about 0.004 seconds on this machine. Commenting out just use warnings, about 0.008 seconds. With both pragmas enabled, about 0.024 seconds.

      This "slow down" seems pretty imperceptible unless you're running the script several times per second. (And in that case, a better speed boost could be had by just running it once, as a persistent process.)

      For comparison, a similar script in Ruby takes around 0.080 seconds; in Python, around 0.050 seconds; in PHP, around 0.040 seconds; in bash, around 0.008 seconds; and in tcsh, around 0.020 seconds.

      use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name
Re: One line dynamic run-parts warpper
by Eily (Hermit) on Dec 17, 2013 at 10:27 UTC

    I'm not sure about making it faster, the most of the time spent is probably running the scripts called by 'run-parts'.

    You could however call exec instead of system if you are not going to do anything after that one line in your Perl script, there's no need to keep the perl process alive when it has done its work.