&do_system("perl exit1.pl"); #### system("perl exit1.pl") || die "Failed to run exit1.pl\n"; #### # This is Perl4 code, I leave the translation to Perl5 # to the reader sub do_system { local($cmd, $reportpattern) = @_; local($ret); print "# Do command $cmd\n" if($verbose); $ret = system($cmd); &interp_ret($cmd, $?, $reportpattern); return($ret); } sub interp_ret { local($cmd,$ret,$reportpattern) = @_; local($sig,$val,%sig_names,$sig_name); return if(!$ret); $sig = ($? & 0xff); $val = $? >> 8; return if ($reportpattern && ! eval($reportpattern)); # Not quite portable but gets close enough %sig_names = (1 ,"SIGHUP" ,2 ,"SIGINT" ,3 ,"SIGQUIT" ,4 ,"SIGILL" ,5 ,"SIGTRAP" , 6 ,"SIGIOT" ,7 ,"SIGABRT",8 ,"SIGFPE" ,9 ,"SIGKILL" , 10,"SIGBUS" ,11,"SIGSEGV" ,12,"SIGSYS",13,"SIGPIPE",14,"SIGALRM", 15,"SIGTERM", 16,"SIGURG",17,"SIGSTOP",18,"SIGTSTP",19,"SIGCONT", 20,"SIGCHLD",21,"SIGTTIN",22,"SIGTTOU",23,"SIGIO",24,"SIGXCPU", 25,"SIGXFSZ",26,"SIGVTALRM",27,"SIGPROF",28,"SIGWINCH",29,"SIGLOST", 30,"SIGUSR1",31,"SIGUSR2",); print "\nIn script $0 the command \"$cmd\" seemed to fail\n"; $sig_name = $sig_names{$sig}; $sig_name = "Unknown SIG $sig" if(!$sig_name); if($sig && $val) { print "Signal $sig_name caused return $val\n"; } elsif($sig) { print "Signal $sig_name\n"; } else { print " Returned status $val\n"; } }