$pid = open3(\*CHLDIN, \*CHLDOUT, \*CHLDERR, @$cmd); close(CHLDIN); #### # timeout handling { local $@ = ""; eval { local $SIG{ALRM} = sub { die("alarm\n") }; # "\n" required alarm(3); # potentially long operation chomp($input = ); alarm(0); 1; } or do { die($@) unless $@ eq "alarm\n"; # timed out warn("No answer for three seconds.\n"); $input = ""; } }