in reply to Trap DB Connect

I would like to timeout this statement after about 15 secs

You want to set an alarm for 15 seconds, and attempt the connection in an eval block.

my $db; eval { local $SIG{ALRM} = sub { die "connect timeout\n" }; alarm 15; $db = DBI->connect("DBI:Oracle:".... ) or die $DBI::errstr; alarm 0; }; if ($@) { # timed out die unless $@ eq "connect timeout\n"; } elsif (!$db) { # didn't connect die "no database connection\n"; } # $db is ok here

If you're running on Win32, I believe you're out of luck, because alarm isn't implemented. Or it could be that it is now implemented in 5.8.8 and/or there's another technique that taps Win32::API to achieve the same functionality.

update: it looks like alarm is implemented in Active Perl build 819 (version 5.8.8) at least (don't know which exact version introduced this).

H:\>perl -wle "eval {$SIG{ALRM}=sub{die qq{ook\n}}; alarm(3); 1 while +1; alarm(0)}; print $@" ook

• another intruder with the mooring in the heart of the Perl