#!/usr/bin/perl -w use strict; foreach my $loop ( 1,1,6,1,6,1,6,6 ) { eval { local $SIG{ALRM} = sub { die("TIMEOUT\n") }; alarm(5); my $pid = open(READER, "ping -s localhost 64 $loop |") or die("Can't ping: $!\n"); while () { print; } close READER; alarm(0); }; if ( $@ =~ /TIMEOUT/ ) { print "***\n"; print "*** Caught alarm from eval block.\n"; print "***\n"; } }