Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Fastest way to minimally check that file contains perl code?

by vr (Curate)
on Mar 13, 2020 at 14:21 UTC ( [id://11114224]=note: print w/replies, xml ) Need Help??


in reply to Fastest way to minimally check that file contains perl code?

When i using perl -c it takes too much time to check

Why don't you spend only as much time as you are ready to spare, and not a millisecond more? (Note: I'm on Windows here. Use Time::HiRes::ualarm in Linux).

use strict; use warnings; use feature 'say'; use Time::HiRes 'time'; use Win32::Process qw/ CREATE_NO_WINDOW STILL_ACTIVE /; my $timeout = 75; # 75 ms for my $fname ( $0, # valid Perl, won't timeout 'Robot3.pm', # some valid Perl, will timeout # (~ 250 ms to check normally) '../DISTRIBUTIONS.txt' # list of Strawberry distributions ) { my $t = time; my $obj; Win32::Process::Create( $obj, $^X, "$^X -c $fname", 0, CREATE_NO_WINDOW, '.' ) or die; $obj-> Wait( $timeout ); my $code; $obj-> GetExitCode( $code ); print "$fname is ", ( $code == 0 or $code == STILL_ACTIVE ) ? "valid perl" : "something else"; $obj-> Kill( 0 ); printf ", we spent %.3fs to check\n", time - $t; } __END__ alarm.pl is valid perl, we spent 0.058s to check Robot3.pm is valid perl, we spent 0.072s to check ../DISTRIBUTIONS.txt is something else, we spent 0.025s to check

Replies are listed 'Best First'.
Re^2: Fastest way to minimally check that file contains perl code?
by Fletch (Bishop) on Mar 13, 2020 at 14:58 UTC

    Taking this (neat) idea even further you could spin up a worker pool (Parallel::ForkManager or MCE) and you can parallelize and increase the number of files you check in that same maximal time (the question being do you have enough files that the parallelism overhead amortized across all the files is worth that hit).

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11114224]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (10)
As of 2024-04-23 09:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found