The only problem I had with your code was the sleep delay was too long. :) The script was executing over tens of thousands of files so in the end I used the implementation below.
my $cmd = shift;
my @results :shared;
my $pid :shared;
$pid = open my $fh, "$cmd |" or die "$!, $^E";
@results = <$fh>;
select(undef, undef, undef, 0.08);
my $test = kill (0, $pid);
kill (3, $pid);
push(@results, "Function timed out.");
Thanks again for all replies.
I was looking to use default active state perl package and was unsure if ipc-run would execute.