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