---
name: "Apache::Symbol"
section: "3pm"
platform: "linux"
package: "libapache-mod-perl"
version: "1.29.0.4-4.1+etch1"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/Apache::Symbol"
---

# Apache::Symbol(3pm)

Things for symbol things

## 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.

## ARGUMENTS

`"undef_functions"` takes two arguments: `"skip"` and `"only_undef_exports"`.

`"skip"` is a regular expression indicating the function names to skip.

Use the `"only_undef_exports"` flag to undef only those functions which are listed in `@EXPORT`, `@EXPORT_OK`, `%EXPORT_TAGS`, or `@EXPORT_EXTRAS`.  `@EXPORT_EXTRAS` is not used by the Exporter, it is only exists to communicate with `"undef_functions"`.

As a special case, if none of the EXPORT variables are defined ignore `"only_undef_exports"`.  This takes care of trivial modules that don't use the Exporter.

## ARGUMENTS

`"undef_functions"` takes two arguments: `"skip"` and `"only_undef_exports"`.

`"skip"` is a regular expression indicating the function names to skip.

Use the `"only_undef_exports"` flag to undef only those functions which are listed in `@EXPORT`, `@EXPORT_OK`, `%EXPORT_TAGS`, or `@EXPORT_EXTRAS`.  `@EXPORT_EXTRAS` is not used by the Exporter, it is only exists to communicate with `"undef_functions"`.

As a special case, if none of the EXPORT variables are defined ignore `"only_undef_exports"`.  This takes care of trivial modules that don't use the Exporter.

## 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)](/perlsub/1.md), *Devel::Symdump*(3)

## AUTHOR

Doug MacEachern
