You need to set an ALRM Handler, just like the alarm
docs demonstrate:
for (1..3) {
print "Loop $_\n";
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 5;
my $count = int rand 10;
print "Is $count < 5?\n";
sleep $count;
alarm 0; #cancel the alarm if does not hang
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
} else {
print "Our code succeeded\n";
last;
}
}