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