my $timeout = 10; # 10 seconds timeout SOURCE: foreach my $source (@sources) { my dbh = connect_to_db($source); my sth = $dbh->prepare( $your_query ); my $eval_result = eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm( $timeout ); $sth->execute( $your_params ); alarm( 0 ); 1; }; if ( $eval_result ) { last SOURCE; # ALL OK } else { print "Timeout happens!\n"; } }