my $pipe; eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm(5); open( $pipe, "<", $pipe_path ) or die "pipe open failed: $!"; alarm(0); }; if ($@) { die unless ($@ eq "alarm\n"); # non-alarm failure. die "timeout on pipe open"; }