The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

The C variable that roughly corresponds to Perl's $^W warning variable. However, $^W is treated as a boolean, whereas PL_dowarn is a collection of flag bits.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

The GV representing *_. Useful for access to $_.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

The stash for the package code will be compiled into.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

The currently active COP (control op) roughly representing the current statement in the source.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

A scratch pad SV for whatever temporary use you need. Chiefly used as a fallback by macros on platforms where "PERL_USE_GCC_BRACE_GROUPS" in perlapi> is unavailable, and which would otherwise evaluate their SV parameter more than once.

A scratch pad variable in which to store a STRLEN value. If would have been better named something like PL_temp_strlen.

It is is typically used with SvPV when one is actually planning to discard the returned length, (hence the length is "Not Applicable", which is how this variable got its name).

It is usually more efficient to either declare a local variable and use that instead, or to use the SvPV_nolen macro.

The input record separator - $/ in Perl space.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

The GV which was last used for a filehandle input operation. (<FH>)

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

The glob containing the output field separator - *, in Perl space.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

Contains flags controlling perl's behaviour on exit():

  • PERL_EXIT_DESTRUCT_END

    If set, END blocks are executed when the interpreter is destroyed. This is normally set by perl itself after the interpreter is constructed.

  • PERL_EXIT_ABORT

    Call abort() on exit. This is used internally by perl itself to abort if exit is called while processing exit.

  • PERL_EXIT_WARN

    Warn on exit.

  • PERL_EXIT_EXPECTED

    Set by the "exit" in perlfunc operator.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

Pointer to the per-subroutine peephole optimiser. This is a function that gets called at the end of compilation of a Perl subroutine (or equivalently independent piece of Perl code) to perform fixups of some ops and to perform small-scale optimisations. The function is called once for each subroutine that is compiled, and is passed, as sole parameter, a pointer to the op that is the entry point to the subroutine. It modifies the op tree in place.

The peephole optimiser should never be completely replaced. Rather, add code to it by wrapping the existing optimiser. The basic way to do this can be seen in "Compile pass 3: peephole optimization" in perlguts. If the new code wishes to operate on ops throughout the subroutine's structure, rather than just at the top level, it is likely to be more convenient to wrap the "PL_rpeepp" hook.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

Pointer to the recursive peephole optimiser. This is a function that gets called at the end of compilation of a Perl subroutine (or equivalently independent piece of Perl code) to perform fixups of some ops and to perform small-scale optimisations. The function is called once for each chain of ops linked through their op_next fields; it is recursively called to handle each side chain. It is passed, as sole parameter, a pointer to the op that is at the head of the chain. It modifies the op tree in place.

The peephole optimiser should never be completely replaced. Rather, add code to it by wrapping the existing optimiser. The basic way to do this can be seen in "Compile pass 3: peephole optimization" in perlguts. If the new code wishes to operate only on ops at a subroutine's top level, rather than throughout the structure, it is likely to be more convenient to wrap the "PL_peepp" hook.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

When non-NULL, the function pointed by this variable will be called each time an OP is freed with the corresponding OP as the argument. This allows extensions to free any extra attribute they have locally attached to an OP. It is also assured to first fire for the parent OP and then for its kids.

When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

PL_modglobal is a general purpose, interpreter global HV for use by extensions that need to keep information on a per-interpreter basis. In a pinch, it can also be used as a symbol table for extensions to share data among each other. It is a good idea to use keys prefixed by the package name of the extension that owns the data.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.

This value may be set when embedding for full cleanup.

Possible values:

  • 0 - none

  • 1 - full

  • 2 or greater - full with checks.

If $ENV{PERL_DESTRUCT_LEVEL} is set to an integer greater than the value of PL_perl_destruct_level its value is used instead.

On threaded perls, each thread has an independent copy of this variable; each initialized at creation time with the current value of the creating thread's copy.