http://qs321.pair.com?node_id=964533

Skeeve has asked for the wisdom of the Perl Monks concerning the following question:

I'm desperately trying to get timeouts to work and came up with this test code:

use Sys::SigAction qw( set_sig_handler ); eval { my $h = set_sig_handler( 'ALRM' ,sub { die "TIMEOUT\n"; }, { mask=>[ 'ALRM' ], safe=>1, }); eval { alarm 3; $opened= open my $check, '-|', 'sleep 60'; if ($opened) { # slurp its output $line= do { local $/; <$check>; }; $exit_code= $!+0; $closed= close $check; } alarm 0; }; alarm 0; die $@ if $@; }; alarm 0; print $@;
Of course I can't really ready something from a "sleep" command, But I expected this to return after 3 seconds with a "Timeout". Instead I have to wait 60 seconds, so the full sleep-time.

I also tried a different command than "sleep" like, for example, a long running "find" command but still the sleep does not die.

What am I doing wrong or what do I misunderstand?


s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
+.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e