in reply to Timing out

use strict; use warnings; use 5.010; eval { local $SIG{ALRM} = sub {die "my timeout"}; #execute this sub when ALRM signal received alarm 3; #sends ALRM signal to this process in 3 secs, which causes sub #to execute $| = 1; #turn off buffering to STDOUT, otherwise all output will come at #program termination when STDOUT's buffer is automatically #flushed while (1) { say 'hi'; sleep 1; } }; #<-- don't forget that semi-colon --output:-- hi hi hi

"Throwing" the error with die() will cause execution to jump out of the eval() block. After the eval() block terminates, the die() message is available in $@. If the eval block terminates without error, $@ will be the null string(whatever that is).