=head1 NAME
ModPerl::Util - Helper mod_perl Functions
=head1 Synopsis
use ModPerl::Util;
# e.g. PerlResponseHandler
$callback = ModPerl::Util::current_callback;
# exit w/o killing the interpreter
ModPerl::Util::exit();
# untaint a string (do not use it! see the doc)
ModPerl::Util::untaint($string);
# removes a stash (.so, %INC{$stash}, etc.) as best as it can
ModPerl::Util::unload_package($stash);
# current perl's address (0x92ac760 or 0x0 under non-threaded perl)
ModPerl::Util::current_perl_id();
=head1 Description
C provides mod_perl utilities API.
=head1 API
C provides the following functions and/or methods:
=head2 C
Returns the currently running callback name,
e.g. C<'PerlResponseHandler'>.
$callback = ModPerl::Util::current_callback();
=over 4
=item ret: C<$callback> ( string )
=item since: 2.0.00
=back
=head2 C
Return the memory address of the perl interpreter
$perl_id = ModPerl::Util::current_perl_id();
=over 4
=item ret: C<$perl_id> ( string )
Under threaded perl returns something like: C<0x92ac760>
Under non-thread perl returns C<0x0>
=item since: 2.0.00
=back
Mainly useful for debugging applications running under threaded-perl.
=head2 C
Terminate the request, but not the current process (or not the current
Perl interpreter with threaded mpms).
ModPerl::Util::exit($status);
=over 4
=item opt arg1: C<$status> ( integer )
The exit status, which as of this writing is ignored. (it's accepted
to be compatible with the core C function.)
=item ret: no return value
=item since: 2.0.00
=back
Normally you will use the plain C in your code. You don't need
to use C explicitly, since mod_perl overrides
C by setting C to
C. Only if you redefine C
once mod_perl is running, you may want to use this function.
The original C is still available via C.
C is implemented as a special C call,
therefore if you call it inside C or C,
while an exception is being thrown, it is caught by C. For
example:
exit;
print "Still running";
will not print anything. But:
eval {
exit;
}
print "Still running";
will print I. So you either need to check whether L is specific to C and call
C again:
use ModPerl::Const -compile => 'EXIT';
eval {
exit;
}
exit if $@ && ref $@ eq 'APR::Error' && $@ == ModPerl::EXIT;
print "Still running";
or use C:
eval {
CORE::exit;
}
print "Still running";
and nothing will be printed. The problem with the latter is the
current process (or a Perl Interpreter) will be killed; something that
you really want to avoid under mod_perl.
=head2 C
Unloads a stash from the current Perl interpreter in the safest way
possible.
ModPerl::Util::unload_package($stash);
=over 4
=item arg1: C<$stash> ( string )
The Perl stash to unload. e.g. C.
=item ret: no return value
=item since: 2.0.00
=back
Unloading a Perl stash (package) is a complicated business. This
function tries very hard to do the right thing. After calling this
function, it should be safe to C