NAME
Apache::Symbol - Things for symbol things
SYNOPSIS
use Apache::Symbol ();
@ISA = qw(Apache::Symbol);
DESCRIPTION
perlsub/Constant Functions says:
If you redefine a subroutine which was eligible for inlining you'll get
a mandatory warning. (You can use this warning to tell whether or not a
particular subroutine is considered constant.) The warning is
considered severe enough not to be optional because previously compiled
invocations of the function will still be using the old value of the
function.
mandatory warning means there is _no_ way to avoid this warning no matter what tricks you pull in Perl. This is bogus for us mod_perl users when restarting the server with PerlFreshRestart on or when Apache::StatINC pulls in a module that has changed on disk.
You can, however, pull some tricks with XS to avoid this warning, Apache::Symbol::undef does just that.
PLAYERS
This module and the undefining of functions is optional, if you wish to have this functionality enabled, there are one or more switches you need to know about.
- PerlRestartHandler
-
Apache::Symbol defines a PerlRestartHandler which can be useful in conjuction with
PerlFreshRestart On
as it will avoid subroutine redefinition messages. Configure like so:PerlRestartHandler Apache::Symbol
- Apache::Registry
-
By placing the SYNOPSIS bit in you script, Apache::Registry will undefine subroutines in your script before it is re-compiled to avoid "subroutine re-defined" warnings.
- Apache::StatINC
-
See Apache::StatINC's docs.
- APACHE_SYMBOL_UNIVERSAL
-
If this environment variable is true when Symbol.pm is compiled, it will define UNIVERSAL::undef_functions, which means all classes will inherit Apache::Symbol::undef_functions.
- Others
-
Module such as HTML::Embperl and Apache::ePerl who compile and script cache scripts ala Apache::Registry style can use
undef_functions
with this bit of code:if($package->can('undef_functions')) { $package->undef_functions; }
Where
$package
is the name of the package in which the script is being re-compiled.
SEE ALSO
perlsub(1), Devel::Symdump(3)
AUTHOR
Doug MacEachern