NAME
Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl
SYNOPSIS
# non-timeout code...
my $t = Mail::SpamAssassin::Timeout->new({ secs => 5 });
$t->run(sub {
# code to run with a 5-second timeout...
});
if ($t->timed_out()) {
# do something...
}
# more non-timeout code...
DESCRIPTION
This module provides a safe, reliable and clean API to provide alarm(2)
-based timeouts for perl code.
Note that $SIG{ALRM}
is used to provide the timeout, so this will not interrupt out-of-control regular expression matches.
Nested timeouts are supported.
PUBLIC METHODS
- my $t = Mail::SpamAssassin::Timeout->new({ ... options ... });
-
Constructor. Options include:
- $t->run($coderef)
-
Run a code reference within the currently-defined timeout.
The timeout is as defined by the secs parameter to the constructor.
Returns whatever the subroutine returns, or
undef
on timeout. If the timer times out,$t-<gt
timed_out()> will return1
.Time elapsed is not cumulative; multiple runs of
run
will restart the timeout from scratch. - $t->run_and_catch($coderef)
-
Run a code reference, as per
$t-<gt
run()>, but also catching anydie()
calls within the code reference.Returns
undef
if nodie()
call was executed and$@
was unset, or the value of$@
if it was set. (The timeout event doesn't count as adie()
.) - $t->timed_out()
-
Returns
1
if the most recent code executed inrun()
timed out, orundef
if it did not. - $t->reset()
-
If called within a
run()
code reference, causes the current alarm timer to be reset to its starting value.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 50:
=over without closing =back