#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @return; eval { local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm 5; @return = `./test.pl`; alarm 0; }; if( $@ ) { # CASE: Command timed out die unless $@ eq "alarm\n"; # propagate unexpected errors } else { # CASE: Did *not* timeout } print Data::Dumper->Dump([\@return],['return']);