my $line; eval { local $SIG{ALRM} = sub { die "alarm clock restart" }; alarm 10; $line = <$child>; alarm 0; }; if ($@) { if ($@ =~ /alarm clock restart/) { print "$$ alarm triggered\n"; next; } else { die "$$ Other error $@\n"; } }