# perlvar - Perl predefined variables - man(1) - [phpMan]


*Source: tldr-pages*

---

[_PERLVAR_(1)](https://www.chedong.com/phpMan.php/man/PERLVAR/1/markdown)                        Perl Programmers Reference Guide                        [_PERLVAR_(1)](https://www.chedong.com/phpMan.php/man/PERLVAR/1/markdown)

## NAME
       perlvar - Perl predefined variables

## DESCRIPTION
### The Syntax of Variable Names
       Variable names in Perl can have several formats.  Usually, they must begin with a letter or
       underscore, in which case they can be arbitrarily long (up to an internal limit of 251
       characters) and may contain letters, digits, underscores, or the special sequence "::" or
       "'".  In this case, the part before the last "::" or "'" is taken to be a _package_ _qualifier_;
       see perlmod.  A Unicode letter that is not ASCII is not considered to be a letter unless
       "use utf8" is in effect, and somewhat more complicated rules apply; see "Identifier parsing"
       in perldata for details.

       Perl variable names may also be a sequence of digits, a single punctuation character, or the
       two-character sequence: "^" (caret or CIRCUMFLEX ACCENT) followed by any one of the
       characters "[][A-Z^_?\]".  These names are all reserved for special uses by Perl; for
       example, the all-digits names are used to hold data captured by backreferences after a
       regular expression match.

       Since Perl v5.6.0, Perl variable names may also be alphanumeric strings preceded by a caret.
       These must all be written using the demarcated variable form using curly braces such as
       "${^Foo}"; the braces are **not **optional.  "${^Foo}" denotes the scalar variable whose name is
       considered to be a control-"F" followed by two "o"'s.  (See "Demarcated variable names using
       braces" in perldata for more information on this form of spelling a variable name or
       specifying access to an element of an array or a hash).  These variables are reserved for
       future special uses by Perl, except for the ones that begin with "^_" (caret-underscore).  No
       name that begins with "^_" will acquire a special meaning in any future version of Perl; such
       names may therefore be used safely in programs.  $^_ itself, however, _is_ reserved.

       Note that you also **must **use the demarcated form to access subscripts of variables of this
       type when interpolating, for instance to access the first element of the "@{^CAPTURE}"
       variable inside of a double quoted string you would write "${^CAPTURE[0]}" and NOT
       "${^CAPTURE}[0]" which would mean to reference a scalar variable named "${^CAPTURE}" and not
       index 0 of the magic "@{^CAPTURE}" array which is populated by the regex engine.

       Perl identifiers that begin with digits or punctuation characters are exempt from the effects
       of the "package" declaration and are always forced to be in package "main"; they are also
       exempt from "strict 'vars'" errors.  A few other names are also exempt in these ways:

           ENV      STDIN
           INC      STDOUT
           ARGV     STDERR
           ARGVOUT
           SIG

       In particular, the special "${^_XYZ}" variables are always taken to be in package "main",
       regardless of any "package" declarations presently in scope.

## SPECIAL VARIABLES
       The following names have special meaning to Perl.  Most punctuation names have reasonable
       mnemonics, or analogs in the shells.  Nevertheless, if you wish to use long variable names,
       you need only say:

           use English;

       at the top of your program.  This aliases all the short names to the long names in the
       current package.  Some even have medium names, generally borrowed from **awk**.  For more info,
       please see English.

       Before you continue, note the sort order for variables.  In general, we first list the
       variables in case-insensitive, almost-lexigraphical order (ignoring the "{" or "^" preceding
       words, as in "${^UNICODE}" or $^T), although $_ and @_ move up to the top of the pile.  For
       variables with the same identifier, we list it in order of scalar, array, hash, and bareword.

### General Variables
       $ARG
       $_      The default input and pattern-searching space.  The following pairs are equivalent:

                   while (<>) {...}    # equivalent only in while!
                   while (defined($_ = <>)) {...}

                   /^Subject:/
                   $_ =~ /^Subject:/

                   tr/a-z/A-Z/
                   $_ =~ tr/a-z/A-Z/

                   chomp
                   chomp($_)

               Here are the places where Perl will assume $_ even if you don't use it:

               •  The following functions use $_ as a default argument:

                  abs,  alarm,  chomp,  chop,  chr,  chroot, cos, defined, eval, evalbytes, exp, fc,
                  glob, hex, int, lc, lcfirst, length, log, lstat,  mkdir,  oct,  ord,  pos,  print,
                  printf,  quotemeta,  readlink,  readpipe, ref, require, reverse (in scalar context
                  only), rmdir, say, sin, split (for its second argument), sqrt,  stat,  study,  uc,
                  ucfirst, unlink, unpack.

               •  All file tests ("-f", "-d") except for "-t", which defaults to STDIN.  See "-X" in
                  perlfunc

               •  The  pattern  matching operations "m//", "s///" and "tr///" (aka "y///") when used
                  without an "=~" operator.

               •  The default iterator variable  in  a  "foreach"  loop  if  no  other  variable  is
                  supplied.

               •  The implicit iterator variable in the grep() and map() functions.

               •  The implicit variable of given().

               •  The default place to put the next value or input record when a "<FH>", "readline",
                  "readdir"  or  "each" operation's result is tested by itself as the sole criterion
                  of a "while" test.  Outside a "while" test, this will not happen.

               $_ is a global variable.

               However, between perl v5.10.0 and v5.24.0, it could be used lexically by writing  "my
               $_".   Making $_ refer to the global $_ in the same scope was then possible with "our
               $_".  This experimental feature was removed and is now a fatal  error,  but  you  may
               encounter it in older code.

               Mnemonic: underline is understood in certain operations.

       @ARG
       @_      Within  a  subroutine the array @_ contains the parameters passed to that subroutine.
               Inside a subroutine, @_ is the default  array  for  the  array  operators  "pop"  and
               "shift".

               See perlsub.

       $LIST_SEPARATOR
       $"      When  an  array  or  an  array slice is interpolated into a double-quoted string or a
               similar context such as "/.../", its elements are separated by this  value.   Default
               is a space.  For example, this:

                   print "The array is: @array\n";

               is equivalent to this:

                   print "The array is: " . join($", @array) . "\n";

               Mnemonic: works in double-quoted context.

       $PROCESS_ID
       $PID
       $$      The  process  number  of  the  Perl  running  this  script.   Though you _can_ set this
               variable, doing so is generally discouraged, although it can be invaluable  for  some
               testing purposes.  It will be reset automatically across fork() calls.

               Note  for Linux and Debian GNU/kFreeBSD users: Before Perl v5.16.0 perl would emulate
               POSIX semantics on Linux systems using  LinuxThreads,  a  partial  implementation  of
               POSIX  Threads  that  has  since  been  superseded by the Native POSIX Thread Library
               (NPTL).

               LinuxThreads is now obsolete on Linux, and caching getpid() like this made  embedding
               perl  unnecessarily complex (since you'd have to manually update the value of $$), so
               now $$ and getppid() will always return the same values as the underlying C library.

               Debian GNU/kFreeBSD systems also used LinuxThreads up until  and  including  the  6.0
               release, but after that moved to FreeBSD thread semantics, which are POSIX-like.

               To   see   if  your  system  is  affected  by  this  discrepancy  check  if  "getconf
               GNU_LIBPTHREAD_VERSION | grep -q NPTL" returns a false value.  NTPL threads  preserve
               the POSIX semantics.

               Mnemonic: same as shells.

       $PROGRAM_NAME
       $0      Contains the name of the program being executed.

               On  some  (but  not all) operating systems assigning to $0 modifies the argument area
               that the "ps" program sees.  On some platforms you  may  have  to  use  special  "ps"
               options or a different "ps" to see the changes.  Modifying the $0 is more useful as a
               way  of indicating the current program state than it is for hiding the program you're
               running.

               Note that there are platform-specific limitations on the maximum length  of  $0.   In
               the most extreme case it may be limited to the space occupied by the original $0.

               In  some  platforms  there  may  be  arbitrary  amount  of padding, for example space
               characters, after the modified name as shown by "ps".  In some platforms this padding
               may extend all the way to the original length of the argument area,  no  matter  what
               you do (this is the case for example with Linux 2.2).

               Note  for  BSD  users:  setting  $0  does not completely remove "perl" from the [**ps**(1)](https://www.chedong.com/phpMan.php/man/ps/1/markdown)
               output.  For example, setting $0 to "foobar" may  result  in  "perl:  foobar  (perl)"
               (whether  both the "perl: " prefix and the " (perl)" suffix are shown depends on your
               exact BSD variant and version).  This is an operating  system  feature,  Perl  cannot
               help it.

               In  multithreaded  scripts Perl coordinates the threads so that any thread may modify
               its copy of the $0 and the change becomes visible to [**ps**(1)](https://www.chedong.com/phpMan.php/man/ps/1/markdown)  (assuming  the  operating
               system plays along).  Note that the view of $0 the other threads have will not change
               since they have their own copies of it.

               If  the program has been given to perl via the switches "-e" or "-E", $0 will contain
               the string "-e".

               On Linux as of perl v5.14.0 the legacy process name will be  set  with  [prctl(2)](https://www.chedong.com/phpMan.php/man/prctl/2/markdown),  in
               addition  to  altering  the  POSIX  name via "argv[0]" as perl has done since version
               4.000.  Now system utilities that read the legacy process name such as  ps,  top  and
               killall  will recognize the name you set when assigning to $0.  The string you supply
               will be cut off at 16 bytes, this is a limitation imposed by Linux.

               Wide characters are invalid in  $0  values.  For  historical  reasons,  though,  Perl
               accepts them and encodes them to UTF-8. When this happens a wide-character warning is
               triggered.

               Mnemonic: same as **sh **and **ksh**.

       $REAL_GROUP_ID
       $GID
       $(      The  real  gid  of this process.  If you are on a machine that supports membership in
               multiple groups simultaneously, gives a space separated list of groups  you  are  in.
               The  first  number  is  the  one  returned  by  getgid(),  and the subsequent ones by
               getgroups(), one of which may be the same as the first number.

               However, a value assigned to $( must be a single number used to set the real gid.  So
               the value given by $( should _not_ be assigned back to $( without being forced numeric,
               such as by adding zero.  Note that this is different to the effective gid ($))  which
               does take a list.

               You  can  change  both  the  real gid and the effective gid at the same time by using
               [POSIX::setgid](https://www.chedong.com/phpMan.php/perldoc/POSIX%3A%3Asetgid/markdown)().  Changes to $( require a check to $!  to detect any possible  errors
               after an attempted change.

               Mnemonic:  parentheses are used to _group_ things.  The real gid is the group you _left_,
               if you're running setgid.

       $EFFECTIVE_GROUP_ID
       $EGID
       $)      The effective gid of this process.  If you are on a machine that supports  membership
               in multiple groups simultaneously, gives a space separated list of groups you are in.
               The  first  number  is  the  one  returned  by  getegid(), and the subsequent ones by
               getgroups(), one of which may be the same as the first number.

               Similarly, a value assigned to $) must also be a  space-separated  list  of  numbers.
               The  first  number  sets  the  effective  gid,  and  the  rest (if any) are passed to
               setgroups().  To get the effect of an empty list for setgroups(), just repeat the new
               effective gid; that is, to force an effective gid  of  5  and  an  effectively  empty
               setgroups() list, say " $) = "5 5" ".

               You  can  change  both  the  effective gid and the real gid at the same time by using
               [POSIX::setgid](https://www.chedong.com/phpMan.php/perldoc/POSIX%3A%3Asetgid/markdown)() (use only a single numeric argument).  Changes to $) require a  check
               to $! to detect any possible errors after an attempted change.

               $<,  $>,  $(  and  $)  can  be  set  only  on machines that support the corresponding
               _set[re][ug]**id()_ **routine.  $( and $)  can  be  swapped  only  on  machines  supporting
               setregid().

               Mnemonic:  parentheses  are  used  to  _group_  things.  The effective gid is the group
               that's _right_ for you, if you're running setgid.

       $REAL_USER_ID
       $UID
       $<      The real uid of this process.  You can change both the real uid and the effective uid
               at the same time by using [POSIX::setuid](https://www.chedong.com/phpMan.php/perldoc/POSIX%3A%3Asetuid/markdown)().  Since changes  to  $<  require  a  system
               call, check $! after a change attempt to detect any possible errors.

               Mnemonic: it's the uid you came _from_, if you're running setuid.

       $EFFECTIVE_USER_ID
       $EUID
       $>      The effective uid of this process.  For example:

                   $< = $>;            # set real to effective uid
                   ($<,$>) = ($>,$<);  # swap real and effective uids

               You  can  change  both  the  effective uid and the real uid at the same time by using
               [POSIX::setuid](https://www.chedong.com/phpMan.php/perldoc/POSIX%3A%3Asetuid/markdown)().  Changes to $> require a check to $! to detect any  possible  errors
               after an attempted change.

               $< and $> can be swapped only on machines supporting setreuid().

               Mnemonic: it's the uid you went _to_, if you're running setuid.

       $SUBSCRIPT_SEPARATOR
       $SUBSEP
       $;      The subscript separator for multidimensional array emulation.  If you refer to a hash
               element as

                   $foo{$x,$y,$z}

               it really means

                   $foo{join($;, $x, $y, $z)}

               But don't put

                   @foo{$x,$y,$z}     # a slice--note the @

               which means

                   ($foo{$x},$foo{$y},$foo{$z})

               Default is "\034", the same as SUBSEP in **awk**.  If your keys contain binary data there
               might not be any safe value for $;.

               Consider using "real" multidimensional arrays as described in perllol.

               Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.

       $a
       $b      Special package variables when using sort(), see "sort" in perlfunc.  Because of this
               specialness  $a  and  $b  don't need to be declared (using "use vars", or our()) even
               when using the "strict 'vars'" pragma.  Don't lexicalize them with "my $a" or "my $b"
               if you want to be able to use them in the sort() comparison block or function.

       %ENV    The hash %ENV contains your current environment.  Setting a value  in  "ENV"  changes
               the environment for any child processes you subsequently fork() off.

               As of v5.18.0, both keys and values stored in %ENV are stringified.

                   my $foo = 1;
                   $ENV{'bar'} = \$foo;
                   if( ref $ENV{'bar'} ) {
                       say "Pre 5.18.0 Behaviour";
                   } else {
                       say "Post 5.18.0 Behaviour";
                   }

               Previously, only child processes received stringified values:

                   my $foo = 1;
                   $ENV{'bar'} = \$foo;

                   # Always printed 'non ref'
                   system($^X, '-e',
                          q/print ( ref $ENV{'bar'}  ? 'ref' : 'non ref' ) /);

               This  happens  because  you can't really share arbitrary data structures with foreign
               processes.

       $OLD_PERL_VERSION
       $]      The revision, version, and subversion of  the  Perl  interpreter,  represented  as  a
               decimal  of  the  form  5.XXXYYY,  where  XXX  is  the  version  / 1e3 and YYY is the
               subversion / 1e6.  For example, Perl v5.10.1 would be "5.010001".

               This variable can be used to determine  whether  the  Perl  interpreter  executing  a
               script is in the right range of versions:

                   warn "No PerlIO!\n" if "$]" < 5.008;

               When  comparing  $],  numeric  comparison  operators should be used, but the variable
               should be stringified first to avoid issues  where  its  original  numeric  value  is
               inaccurate.

               See  also  the  documentation of "use VERSION" and "require VERSION" for a convenient
               way to fail if the running Perl interpreter is too old.

               See "$^V" for a representation of the Perl version as a version object, which  allows
               more flexible string comparisons.

               The  main  advantage of $] over $^V is that it works the same on any version of Perl.
               The disadvantages are that it can't easily be compared to versions in  other  formats
               (e.g.  literal  v-strings,  "v1.2.3"  or version objects) and numeric comparisons are
               subject to the binary floating point representation; it's good  for  numeric  literal
               version checks and bad for comparing to a variable that hasn't been sanity-checked.

               The  $OLD_PERL_VERSION  form was added in Perl v5.20.0 for historical reasons but its
               use is discouraged. (If your reason to use $] is  to  run  code  on  old  perls  then
               referring to it as $OLD_PERL_VERSION would be self-defeating.)

               Mnemonic: Is this version of perl in the right bracket?

       $SYSTEM_FD_MAX
       $^F     The maximum system file descriptor, ordinarily 2.  System file descriptors are passed
               to  exec()ed  processes,  while  higher  file  descriptors  are not.  Also, during an
               open(), system file descriptors are preserved even if the open() fails (ordinary file
               descriptors are closed before the open() is attempted).  The close-on-exec status  of
               a  file  descriptor  will  be  decided  according  to  the  value  of  $^F  when  the
               corresponding file, pipe, or socket was opened, not the time of the exec().

       @F      The array @F contains the fields of each line read in when autosplit mode  is  turned
               on.   See  perlrun  for  the  **-a **switch.  This array is package-specific, and must be
               declared or given a full package name if not  in  package  main  when  running  under
               "strict 'vars'".

       @INC    The  array  @INC  contains the list of places that the "do EXPR", "require", or "use"
               constructs look for their library files.  It initially consists of the  arguments  to
               any  **-I  **command-line  switches,  followed  by  the  default  Perl  library, probably
               _/usr/local/lib/perl_.   Prior  to  Perl  5.26,  "."  -which  represents  the   current
               directory,  was  included  in  @INC;  it has been removed. This change in behavior is
               documented in "PERL_USE_UNSAFE_INC" and it is not recommended that "." be re-added to
               @INC.  If you need to modify @INC at runtime, you should use the "use lib" pragma  to
               get the machine-dependent library properly loaded as well:

                   use lib '/mypath/libdir/';
                   use SomeMod;

               You  can  also  insert  hooks  into  the  file  inclusion system by putting Perl code
               directly into @INC.  Those hooks may be subroutine references,  array  references  or
               blessed objects.  See "require" in perlfunc for details.

       %INC    The hash %INC contains entries for each filename included via the "do", "require", or
               "use"  operators.  The key is the filename you specified (with module names converted
               to pathnames), and the value is the  location  of  the  file  found.   The  "require"
               operator  uses  this  hash  to  determine  whether a particular file has already been
               included.

               If the file was loaded via a hook (e.g. a  subroutine  reference,  see  "require"  in
               perlfunc  for  a  description  of these hooks), this hook is by default inserted into
               %INC in place of a filename.  Note, however, that the hook  may  have  set  the  %INC
               entry by itself to provide some more specific info.

       $INC    As of 5.37.7 when an @INC hook is executed the index of the @INC array that holds the
               hook  will  be  localized  into the $INC variable.  When the hook returns the integer
               successor of its value will be used to determine the next index in @INC that will  be
               checked,  thus if it is set to -1 (or "undef") the traversal over the @INC array will
               be restarted from its beginning.

               Normally traversal through the @INC array is from beginning to end  ("0  ..  $#INC"),
               and  if  the  @INC  array is modified by the hook the iterator may be left in a state
               where newly added entries are skipped.  Changing this value allows an  @INC  hook  to
               rewrite  the  @INC array and tell Perl where to continue afterwards. See "require" in
               perlfunc for details on @INC hooks.

       $INPLACE_EDIT
       $^I     The current value of the inplace-edit extension.   Use  "undef"  to  disable  inplace
               editing.

               Mnemonic: value of **-i **switch.

       @ISA    Each  package  contains  a  special  array  called @ISA which contains a list of that
               class's parent classes, if any. This array is simply a list of scalars, each of which
               is a string that corresponds to a package name. The array is examined when Perl  does
               method resolution, which is covered in perlobj.

               To  load  packages  while adding them to @ISA, see the parent pragma. The discouraged
               base pragma does this as well, but should not be used except when compatibility  with
               the discouraged fields pragma is required.

       $^M     By  default,  running  out  of  memory  is  an untrappable, fatal error.  However, if
               suitably built, Perl can use the contents of $^M as an emergency  memory  pool  after
               die()ing.  Suppose that your Perl were compiled with "-DPERL_EMERGENCY_SBRK" and used
               Perl's malloc.  Then

                   $^M = 'a' x (1 << 16);

               would  allocate  a  64K  buffer for use in an emergency.  See the INSTALL file in the
               Perl distribution for information on how to  add  custom  C  compilation  flags  when
               compiling  perl.   To  discourage  casual  use  of this advanced feature, there is no
               English long name for this variable.

               This variable was added in Perl 5.004.

       ${^MAX_NESTED_EVAL_BEGIN_BLOCKS}
               This variable determines the maximum number "eval EXPR"/"BEGIN" or  "require"/"BEGIN"
               block  nesting  that  is  allowed. This means it also controls the maximum nesting of
               "use" statements as well.

               The default of 1000 should be sufficiently large for normal working purposes, and  if
               you  must  raise  it  then  you  should  be  conservative with your choice or you may
               encounter segfaults from exhaustion of the C stack. It seems unlikely that real  code
               has a use depth above 1000, but we have left this configurable just in case.

               When  set  to  0  then  "BEGIN"  blocks  inside  of "eval EXPR" or "require EXPR" are
               forbidden entirely and will trigger an exception which will terminate the compilation
               and in the case of "require" will throw an exception, or in the case of "eval" return
               the error in $@ as usual.

               Consider the code

                perl -le'sub f { eval "BEGIN { f() }"; } f()'

               each invocation of f() will consume considerable C stack, and this variable  is  used
               to  cause  code  like  this to die instead of exhausting the C stack and triggering a
               segfault. Needless to say code like this is unusual, it is unlikely you will actually
               need to raise the setting.  However it may be useful to set it to  0  for  a  limited
               time period to prevent BEGIN{} blocks from being executed during an "eval EXPR".

               Note that setting this to 1 would NOT affect code like this:

                   BEGIN { $n += 1; BEGIN { $n += 2; BEGIN { $n += 4 } } }

               The  reason  is  that BEGIN blocks are executed immediately after they are completed,
               thus the innermost will execute before the ones which contain it have  even  finished
               compiling, and the depth will not go above 1. In fact the above code is equivalent to

                   BEGIN { $n+=4 }
                   BEGIN { $n+=2 }
                   BEGIN { $n+=1 }

               which makes it obvious why a ${^MAX_EVAL_BEGIN_DEPTH} of 1 would not block this code.

               Only  "BEGIN"'s  executed  inside  of an "eval" or "require" (possibly via "use") are
               affected.

       $OSNAME
       $^O     The name of the operating system  under  which  this  copy  of  Perl  was  built,  as
               determined  during  the  configuration  process.   For  examples  see  "PLATFORMS" in
               perlport.

               The value is identical to $Config{'osname'}.  See also Config and the **-V **command-line
               switch documented in perlrun.

               In Windows platforms, $^O is not very helpful:  since  it  is  always  "MSWin32",  it
               doesn't    tell    the    difference    between   95/98/ME/NT/2000/XP/CE/.NET.    Use
               [Win32::GetOSName](https://www.chedong.com/phpMan.php/perldoc/Win32%3A%3AGetOSName/markdown)() or [**Win32::GetOSVersion](https://www.chedong.com/phpMan.php/perldoc/Win32%3A%3AGetOSVersion/markdown)() **(see Win32 and perlport)  to  distinguish
               between the variants.

               This variable was added in Perl 5.003.

       %SIG    The hash %SIG contains signal handlers for signals.  For example:

                   sub handler {   # 1st argument is signal name
                       my($sig) = @_;
                       print "Caught a SIG$sig--shutting down\n";
                       close(LOG);
                       [exit(0)](https://www.chedong.com/phpMan.php/man/exit/0/markdown);
                   }

                   $SIG{'INT'}  = \&handler;
                   $SIG{'QUIT'} = \&handler;
                   ...
                   $SIG{'INT'}  = 'DEFAULT';   # restore default action
                   $SIG{'QUIT'} = 'IGNORE';    # ignore SIGQUIT

               Using  a  value of 'IGNORE' usually has the effect of ignoring the signal, except for
               the "CHLD" signal.  See perlipc for more about this special  case.   Using  an  empty
               string or "undef" as the value has the same effect as 'DEFAULT'.

               Here are some other examples:

                   $SIG{"PIPE"} = "Plumber";   # assumes [main::Plumber](https://www.chedong.com/phpMan.php/perldoc/main%3A%3APlumber/markdown) (not
                                               # recommended)
                   $SIG{"PIPE"} = \&Plumber;   # just fine; assume current
                                               # Plumber
                   $SIG{"PIPE"} = *Plumber;    # somewhat esoteric
                   $SIG{"PIPE"} = Plumber();   # oops, what did Plumber()
                                               # return??

               Be sure not to use a bareword as the name of a signal handler, lest you inadvertently
               call it.

               Using  a  string  that  doesn't  correspond  to  any existing function or a glob that
               doesn't contain a code slot is equivalent to 'IGNORE', but a warning is emitted  when
               the  handler  is  being  called  (the  warning  is not emitted for the internal hooks
               described below).

               If your system has the sigaction() function then signal handlers are installed  using
               it.  This means you get reliable signal handling.

               The  default  delivery  policy of signals changed in Perl v5.8.0 from immediate (also
               known as "unsafe") to deferred, also known as "safe signals".  See perlipc  for  more
               information.

               Certain internal hooks can be also set using the %SIG hash.  The routine indicated by
               $SIG{__WARN__}  is called when a warning message is about to be printed.  The warning
               message is passed as the first argument.  The presence of a  "__WARN__"  hook  causes
               the  ordinary printing of warnings to "STDERR" to be suppressed.  You can use this to
               save warnings in a variable, or turn warnings into fatal errors, like this:

                   local $SIG{__WARN__} = sub { die $_[0] };
                   eval $proggie;

               As the 'IGNORE' hook is not supported by "__WARN__", its effect is the same as  using
               'DEFAULT'.  You can disable warnings using the empty subroutine:

                   local $SIG{__WARN__} = sub {};

               The  routine  indicated by $SIG{__DIE__} is called when a fatal exception is about to
               be thrown.  The error message is passed as the first argument.  When a "__DIE__" hook
               routine returns, the exception processing continues as it would have in  the  absence
               of  the hook, unless the hook routine itself exits via a "goto &sub", a loop exit, or
               a die().  The "__DIE__" handler is explicitly disabled during the call, so  that  you
               can die from a "__DIE__" handler.  Similarly for "__WARN__".

               The  $SIG{__DIE__}  hook  is  called  even inside an eval(). It was never intended to
               happen this way, but an implementation glitch made this possible.  This  used  to  be
               deprecated,  as  it  allowed  strange  action  at a distance like rewriting a pending
               exception in $@. Plans to rectify this  have  been  scrapped,  as  users  found  that
               rewriting a pending exception is actually a useful feature, and not a bug.

               The $SIG{__DIE__} doesn't support 'IGNORE'; it has the same effect as 'DEFAULT'.

               "__DIE__"/"__WARN__"  handlers are very special in one respect: they may be called to
               report (probable) errors found by the parser.  In such a case the parser  may  be  in
               inconsistent  state,  so  any  attempt to evaluate Perl code from such a handler will
               probably result in a segfault.  This means that warnings or errors that  result  from
               parsing Perl should be used with extreme caution, like this:

                   require Carp if defined $^S;
                   [Carp::confess](https://www.chedong.com/phpMan.php/perldoc/Carp%3A%3Aconfess/markdown)("Something wrong") if defined &[Carp::confess](https://www.chedong.com/phpMan.php/perldoc/Carp%3A%3Aconfess/markdown);
                   die "Something wrong, but could not load Carp to give "
                     . "backtrace...\n\t"
                     . "To see backtrace try starting Perl with -MCarp switch";

               Here  the first line will load "Carp" _unless_ it is the parser who called the handler.
               The second line will print backtrace and die if "Carp" was available.  The third line
               will be executed only if "Carp" was not available.

               Having to even think about the $^S variable in  your  exception  handlers  is  simply
               wrong.   $SIG{__DIE__}  as  currently  implemented  invites grievous and difficult to
               track down errors.  Avoid  it  and  use  an  "END{}"  or  [CORE::GLOBAL::die](https://www.chedong.com/phpMan.php/perldoc/CORE%3A%3AGLOBAL%3A%3Adie/markdown)  override
               instead.

               See  "die"  in  perlfunc,  "warn"  in  perlfunc, "eval" in perlfunc, and warnings for
               additional information.

       %{^HOOK}
               This hash contains coderefs which are called when various  perl  keywords  which  are
               hard  or  impossible  to  wrap  are called. The keys of this hash are named after the
               keyword that is being hooked, followed by two underbars and then a phase term; either
               "before" or "after".

               Perl will throw an error if you attempt modify a  key  which  is  not  documented  to
               exist,  or  if  you attempt to store anything other than a code reference or undef in
               the hash.  If you wish to use an object to implement a hook you can use  currying  to
               embed the object into an anonymous code reference.

               Currently  there  is  only  one  keyword  which  can  be hooked, "require", but it is
               expected that in future releases there will be additional keywords with hook support.

               require__before
                   The routine indicated  by  "${^HOOK}{require__before}"  is  called  by  "require"
                   **before  **it checks %INC, looks up @INC, calls INC hooks, or compiles any code.  It
                   is called with a single argument,  the  filename  for  the  item  being  required
                   (package  names  are  converted  to paths).  It may alter this filename to change
                   what file is loaded.  If the hook dies during execution then it  will  block  the
                   require from executing.

                   In  order  to make it easy to perform an action with shared state both before and
                   after the require keyword was executed the "require__before" hook  may  return  a
                   "post-action"  coderef  which  will  in  turn  be  executed  when  the  "require"
                   completes.  This coderef will be executed regardless as to  whether  the  require
                   completed succesfully or threw an exception.  It will be called with the filename
                   that  was  required.   You  can  check  %INC  to  determine  if  the  require was
                   successful.  Any other return from the "require__before" hook  will  be  silently
                   ignored.

                   "require__before"  hooks are called in FIFO order, and if the hook returns a code
                   reference those code references will be called in FILO order.  In other words  if
                   A  requires B requires C, then "require__before" will be called first for A, then
                   B and then C, and the post-action code reference will executed first for C,  then
                   B and then finally A.

                   Well  behaved  code  should  ensure that when setting up a "require__before" hook
                   that any prior installed hook will be called, and that their return value,  if  a
                   code reference, will be called as well.  See "require" in perlfunc for an example
                   implementation.

               require__after
                   The  routine indicated by "${^HOOK}{require__after}" is called by "require" **after**
                   the require completes.  It is called with a single argument, the filename for the
                   item being required (package names are converted to paths).  It is executed  when
                   the  "require"  completes,  either via exception or via completion of the require
                   statement, and you can check %INC to determine if the require was successful.

                   The "require__after" hook is called for each required  file  in  FILO  order.  In
                   other  words  if  A  requires  B requires C, then "require__after" will be called
                   first for C, then B and then A.

       $BASETIME
       $^T     The time at which the program began running, in seconds since the epoch (beginning of
               1970).  The values returned by the **-M**, **-A**, and **-C **filetests are based on this value.

       $PERL_VERSION
       $^V     The revision, version, and subversion of  the  Perl  interpreter,  represented  as  a
               version object.

               This  variable  first  appeared  in perl v5.6.0; earlier versions of perl will see an
               undefined value.  Before perl v5.10.0 $^V was represented as a v-string rather than a
               version object.

               $^V can be used to determine whether the Perl interpreter executing a  script  is  in
               the right range of versions.  For example:

                   warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1

               While  version  objects  overload  stringification,  to portably convert $^V into its
               string representation,  use  sprintf()'s  "%vd"  conversion,  which  works  for  both
               v-strings or version objects:

                   printf "version is v%vd\n", $^V;  # Perl's version

               See  the documentation of "use VERSION" and "require VERSION" for a convenient way to
               fail if the running Perl interpreter is too old.

               See also "$]" for a decimal representation of the Perl version.

               The main advantage of $^V over $] is that, for Perl v5.10.0 or  later,  it  overloads
               operators,  allowing  easy  comparison  against  other  version representations (e.g.
               decimal, literal v-string, "v1.2.3", or objects).  The disadvantage is that prior  to
               v5.10.0,  it  was only a literal v-string, which can't be easily printed or compared,
               whereas the behavior of $] is unchanged on all versions of Perl.

               Mnemonic: use ^V for a version object.

       $EXECUTABLE_NAME
       $^X     The name used to execute the current copy of  Perl,  from  C's  "argv[0]"  or  (where
               supported) _/proc/self/exe_.

               Depending  on  the  host  operating  system,  the  value  of $^X may be a relative or
               absolute pathname of the perl program file, or may be the string used to invoke  perl
               but  not  the pathname of the perl program file.  Also, most operating systems permit
               invoking programs that are not in the PATH  environment  variable,  so  there  is  no
               guarantee  that  the  value  of  $^X  is  in PATH.  For VMS, the value may or may not
               include a version number.

               You usually can use the value of $^X to re-invoke an independent  copy  of  the  same
               perl that is currently running, e.g.,

                   @first_run = `$^X -le "print int rand 100 for 1..100"`;

               But  recall that not all operating systems support forking or capturing of the output
               of commands, so this complex statement may not be portable.

               It is not safe to use the value of $^X as a path name of a file,  as  some  operating
               systems  that  have  a mandatory suffix on executable files do not require use of the
               suffix when invoking a command.  To convert the value of $^X to a path name, use  the
               following statements:

                   # Build up a set of file names (not command names).
                   use Config;
                   my $this_perl = $^X;
                   if ($^O ne 'VMS') {
                       $this_perl .= $Config{_exe}
                       unless $this_perl =~ m/$Config{_exe}$/i;
                   }

               Because  many  operating  systems  permit anyone with read access to the Perl program
               file to make a copy of it, patch the copy, and then execute the copy,  the  security-
               conscious  Perl programmer should take care to invoke the installed copy of perl, not
               the copy referenced by $^X.  The  following  statements  accomplish  this  goal,  and
               produce a pathname that can be invoked as a command or referenced as a file.

                   use Config;
                   my $secure_perl_path = $Config{perlpath};
                   if ($^O ne 'VMS') {
                       $secure_perl_path .= $Config{_exe}
                       unless $secure_perl_path =~ m/$Config{_exe}$/i;
                   }

### Variables related to regular expressions
       Most  of  the  special  variables  related to regular expressions are side effects. Perl sets
       these variables when it has completed a match successfully, so you  should  check  the  match
       result before using them.  For instance:

           if( /P(A)TT(ER)N/ ) {
               print "I found $1 and $2\n";
           }

       These  variables  are  read-only  and behave similarly to a dynamically scoped variable, with
       only a few exceptions which  are  explicitly  documented  as  behaving  otherwise.   See  the
       following section for more details.

       _Scoping_ _Rules_ _of_ _Regex_ _Variables_

       Regular  expression  variables  allow  the  programmer to access the state of the most recent
       _successful_ regex match in the current dynamic scope.

       The variables themselves are global  and  unscoped,  but  the  data  they  access  is  scoped
       similarly  to  dynamically scoped variables, in that every successful match behaves as though
       it localizes a global state object to the  current  block  or  file  scope.   (See  "Compound
       Statements" in perlsyn for more details on dynamic scoping and the "local" keyword.)

       A _successful_ _match_ includes any successful match performed by the search and replace operator
       "s///" as well as those performed by the "m//" operator.

       Consider the following code:

           my @state;
           sub matchit {
               push @state, $1;            # pushes "baz"
               my $str = shift;
               $str =~ /(zat)/;            # matches "zat"
               push @state, $1;            # pushes "zat"
           }

           {
               $str = "foo bar baz blorp zat";
               $str =~ /(foo)/;            # matches "foo"
               push @state, $1;            # pushes "foo"
               {
                   $str =~ /(pizza)/;      # does NOT match
                   push @state, $1;        # pushes "foo"
                   $str =~ /(bar)/;        # matches "bar"
                   push @state, $1;        # pushes "bar"
                   $str =~ /(baz)/;        # matches "baz"
                   matchit($str);          # see above
                   push @state, $1;        # pushes "baz"
               }
               $str =~ s/noodles/rice/;    # does NOT match
               push @state, $1;            # pushes "foo"
               $str =~ s/(blorp)/zwoop/;   # matches "blorp"
               push @state, $1;            # pushes "blorp"
           }
           # the following prints "foo, foo, bar, baz, zat, baz, foo, blorp"
           print join ",", @state;

       Notice  that each successful match in the exact same scope overrides the match context of the
       previous successful match, but that unsuccessful matches do not. Also note that in  an  inner
       nested  scope  the  previous  state  from  an  outer dynamic scope persists until it has been
       overriden by another successful match, but that when the inner nested  scope  exits  whatever
       match  context  was  in  effect  before the inner successful match is restored when the scope
       concludes.

       It is a known issue that "goto LABEL" may interact poorly with the dynamically  scoped  match
       context.  This  may not be fixable, and is considered to be one of many good reasons to avoid
       "goto LABEL".

       _Performance_ _issues_

       Traditionally in Perl, any use of any of the three variables  "$`", $& or "$'" (or their "use
       English" equivalents) anywhere in the code, caused all subsequent successful pattern  matches
       to make a copy of the matched string, in case the code might subsequently access one of those
       variables.   This  imposed  a  considerable  performance penalty across the whole program, so
       generally the use of these variables has been discouraged.

       In Perl 5.6.0 the "@-" and "@+" dynamic arrays were introduced that  supply  the  indices  of
       successful matches. So you could for example do this:

           $str =~ /pattern/;

           print $`, $&, $'; # bad: performance hit

           print             # good: no performance hit
           substr($str, 0,     $-[0]),
           substr($str, $-[0], $+[0]-$-[0]),
           substr($str, $+[0]);

       In  Perl  5.10.0  the  "/p"  match  operator  flag  and  the "${^PREMATCH}", "${^MATCH}", and
       "${^POSTMATCH}" variables were introduced, that allowed you to suffer the penalties  only  on
       patterns marked with "/p".

       In  Perl  5.18.0  onwards,  perl  started  noting the presence of each of the three variables
       separately, and only copied that part of the string required; so in

           $`; $&; "abcdefgh" =~ /d/

       perl would only copy the "abcd" part of the string. That  could  make  a  big  difference  in
       something like

           $str = 'x' x 1_000_000;
           $&; # whoops
           $str =~ /x/g # one char copied a million times, not a million chars

       In Perl 5.20.0 a new copy-on-write system was enabled by default, which finally fixes most of
       the performance issues with these three variables, and makes them safe to use anywhere.

       The  "[Devel::NYTProf](https://www.chedong.com/phpMan.php/perldoc/Devel%3A%3ANYTProf/markdown)"  and  "[Devel::FindAmpersand](https://www.chedong.com/phpMan.php/perldoc/Devel%3A%3AFindAmpersand/markdown)"  modules  can  help you find uses of these
       problematic match variables in your code.

       $<_digits_> ($1, $2, ...)
               Contains the subpattern from the corresponding set of capturing parentheses from  the
               last  successful  pattern  match in the current dynamic scope. (See "Scoping Rules of
               Regex Variables".)

               Note there is a distinction between a capture buffer which matches the empty string a
               capture buffer which is optional. Eg, "(x?)" and "(x)?" The latter may be undef,  the
               former not.

               These variables are read-only.

               Mnemonic: like \digits.

       @{^CAPTURE}
               An  array  which  exposes  the  contents  of the capture buffers, if any, of the last
               successful pattern match, not counting patterns matched in nested  blocks  that  have
               been exited already.

               Note  that  the 0 index of @{^CAPTURE} is equivalent to $1, the 1 index is equivalent
               to $2, etc.

                   if ("foal"=~/(.)(.)(.)(.)/) {
                       print join "-", @{^CAPTURE};
                   }

               should output "f-o-a-l".

               See also "$<_digits_> ($1, $2, ...)", "%{^CAPTURE}" and "%{^CAPTURE_ALL}".

               Note that unlike  most  other  regex  magic  variables  there  is  no  single  letter
               equivalent to "@{^CAPTURE}". Also be aware that when interpolating subscripts of this
               array you **must **use the demarcated variable form, for instance

                   print "${^CAPTURE[0]}"

               see "Demarcated variable names using braces" in perldata for more information on this
               form and its uses.

               This variable was added in 5.25.7

       $MATCH
       $&      The  string  matched  by  the  last successful pattern match.  (See "Scoping Rules of
               Regex Variables".)

               See "Performance issues" above for the serious performance implications of using this
               variable (even once) in your code.

               This variable is read-only, and its value is dynamically scoped.

               Mnemonic: like "&" in some editors.

       ${^MATCH}
               It is only guaranteed to return a defined value when  the  pattern  was  compiled  or
               executed with the "/p" modifier.

               This  is  similar to $& ($MATCH) except that to use it you must use the "/p" modifier
               when executing the pattern, and it does not incur and performance penalty  associated
               with that variable.

               See "Performance issues" above.

               This variable was added in Perl v5.10.0.

               This variable is read-only, and its value is dynamically scoped.

       $PREMATCH
       $`      The  string preceding whatever was matched by the last successful pattern match. (See
               "Scoping Rules of Regex Variables").

               See "Performance issues" above for the serious performance implications of using this
               variable (even once) in your code.

               This variable is read-only, and its value is dynamically scoped.

               Mnemonic: "`" often precedes a quoted string.

       ${^PREMATCH}
               It is only guaranteed to return a defined value when the pattern  was  executed  with
               the "/p" modifier.

               This  is  similar  to  "$`"  ($PREMATCH)  except that to use it you must use the "/p"
               modifier when executing the pattern, and it does not incur  and  performance  penalty
               associated with that variable.

               See "Performance issues" above.

               This variable was added in Perl v5.10.0.

               This variable is read-only, and its value is dynamically scoped.

       $POSTMATCH
       $'      The  string following whatever was matched by the last successful pattern match. (See
               "Scoping Rules of Regex Variables"). Example:

                   local $_ = 'abcdefghi';
                   /def/;
                   print "$`:$&:$'\n";       # prints abc:def:ghi

               See "Performance issues" above for the serious performance implications of using this
               variable (even once) in your code.

               This variable is read-only, and its value is dynamically scoped.

               Mnemonic: "'" often follows a quoted string.

       ${^POSTMATCH}
               It is only guaranteed to return a defined value when  the  pattern  was  compiled  or
               executed with the "/p" modifier.

               This  is  similar  to  "$'"  ($POSTMATCH) except that to use it you must use the "/p"
               modifier when executing the pattern, and it does not incur  and  performance  penalty
               associated with that variable.

               See "Performance issues" above.

               This variable was added in Perl v5.10.0.

               This variable is read-only, and its value is dynamically scoped.

       $LAST_PAREN_MATCH
       $+      The  text  matched  by  the  highest used capture group of the last successful search
               pattern. (See "Scoping Rules of Regex Variables").  It is logically equivalent to the
               highest numbered capture variable ($1, $2, ...) which has a defined value.

               This is useful if you don't know which one of a set of alternative patterns  matched.
               For example:

                   /Version: (.*)|Revision: (.*)/ && ($rev = $+);

               This variable is read-only, and its value is dynamically scoped.

               Mnemonic: be positive and forward looking.

       $LAST_SUBMATCH_RESULT
       $^N     The  text  matched  by  the  used group most-recently closed (i.e. the group with the
               rightmost closing parenthesis) of the last successful match.  (See "Scoping Rules  of
               Regex Variables").

               This is subtly different from $+. For example in

                   "ab" =~ /^((.)(.))$/

               we have

                   $1,$^N   have the value "ab"
                   $2       has  the value "a"
                   $3,$+    have the value "b"

               This  is primarily used inside "(?{...})" blocks for examining text recently matched.
               For example, to effectively capture text to a variable (in addition to $1, $2, etc.),
               replace "(...)" with

                   (?:(...)(?{ $var = $^N }))

               By setting and then using $var in this way relieves you from having  to  worry  about
               exactly which numbered set of parentheses they are.

               This variable is read-only, and its value is dynamically scoped.

               This variable was added in Perl v5.8.0.

               Mnemonic: the (possibly) Nested parenthesis that most recently closed.

       @LAST_MATCH_END
       @+      This  array  holds  the  offsets  of  the  ends  of the last successful match and any
               matching capture buffers that the pattern contains.  (See  "Scoping  Rules  of  Regex
               Variables")

               The  number  of  elements  it  contains  will  be one more than the number of capture
               buffers in the pattern, regardless of which capture buffers actually matched. You can
               use this to determine how many capture buffers there are in the pattern. (As  opposed
               to "@-" which may have fewer elements.)

               $+[0] is the offset into the string of the end of the entire match.  This is the same
               value as what the "pos" function returns when called on the variable that was matched
               against. The _n_th element of this array holds the offset of the _n_th submatch, so $+[1]
               is the offset past where $1 ends, $+[2] the offset past where $2 ends, and so on. You
               can  use  $#+  to determine how many subgroups were in the last successful match. See
               the examples given for the "@-" variable.

               This variable is read-only, and its value is dynamically scoped.

               This variable was added in Perl v5.6.0.

       %{^CAPTURE}
       %LAST_PAREN_MATCH
       %+      Similar to "@+", the "%+" hash allows access to the  named  capture  buffers,  should
               they  exist, in the last successful match in the currently active dynamic scope. (See
               "Scoping Rules of Regex Variables").

               For example, $+{foo} is equivalent to $1 after the following match:

                   'foo' =~ /(?<foo>foo)/;

               The keys of the "%+" hash list only the names of buffers that have captured (and that
               are thus associated to defined values).

               If multiple distinct capture groups have the same name, then $+{NAME} will  refer  to
               the leftmost defined group in the match.

               The underlying behaviour of "%+" is provided by the [Tie::Hash::NamedCapture](https://www.chedong.com/phpMan.php/perldoc/Tie%3A%3AHash%3A%3ANamedCapture/markdown) module.

               **Note:  **"%-"  and  "%+" are tied views into a common internal hash associated with the
               last successful regular expression.  Therefore mixing iterative access  to  them  via
               "each"  may  have  unpredictable  results.   Likewise,  if  the last successful match
               changes, then the results may be surprising.

               This variable was added in Perl v5.10.0. The "%{^CAPTURE}" alias was added in 5.25.7.

               This variable is read-only, and its value is dynamically scoped.

       @LAST_MATCH_START
       @-      This array holds the offsets of the beginnings of the last successful match  and  any
               capture buffers it contains.  (See "Scoping Rules of Regex Variables").

               The  number  of  elements it contains will be one more than the number of the highest
               capture buffers (also called a subgroup) that actually matched something. (As opposed
               to "@+" which may have fewer elements.)

               "$-[0]" is the offset of the start of the last  successful  match.   "$-[_n_]"  is  the
               offset  of  the  start  of  the substring matched by _n_-th subpattern, or undef if the
               subpattern did not match.

               Thus, after a match against $_, $& coincides with "substr $_, $-[0], $+[0] -  $-[0]".
               Similarly,  "$_n_"  coincides  with  "substr  $_,  $-[n],  $+[n] - $-[n]" if "$-[n]" is
               defined, and $+ coincides with "substr $_, $-[$#-], $+[$#-] - $-[$#-]".  One can  use
               "$#-"  to find the last matched subgroup in the last successful match.  Contrast with
               $#+, the number of subgroups in the regular expression.

               "$-[0]" is the offset into the string of the beginning of the entire match.  The  _n_th
               element  of this array holds the offset of the _n_th submatch, so "$-[1]" is the offset
               where $1 begins, "$-[2]" the offset where $2 begins, and so on.

               After a match against some variable $var:

               "$`" is the same as "substr($var, 0, $-[0])"
               $& is the same as "substr($var, $-[0], $+[0] - $-[0])"
               "$'" is the same as "substr($var, $+[0])"
               $1 is the same as "substr($var, $-[1], $+[1] - $-[1])"
               $2 is the same as "substr($var, $-[2], $+[2] - $-[2])"
               $3 is the same as "substr($var, $-[3], $+[3] - $-[3])"

               This variable is read-only, and its value is dynamically scoped.

               This variable was added in Perl v5.6.0.

       %{^CAPTURE_ALL}
       %-      Similar to "%+", this variable allows access to the named capture groups in the  last
               successful  match in the currently active dynamic scope. (See "Scoping Rules of Regex
               Variables"). To  each  capture  group  name  found  in  the  regular  expression,  it
               associates  a  reference  to  an  array containing the list of values captured by all
               buffers with that name (should there be several of them), in  the  order  where  they
               appear.

               Here's an example:

                   if ('1234' =~ /(?<A>1)(?<B>2)(?<A>3)(?<B>4)/) {
                       foreach my $bufname (sort keys %-) {
                           my $ary = $-{$bufname};
                           foreach my $idx (0..$#$ary) {
                               print "\$-{$bufname}[$idx] : ",
                                     (defined($ary->[$idx])
                                         ? "'$ary->[$idx]'"
                                         : "undef"),
                                     "\n";
                           }
                       }
                   }

               would print out:

                   $-{A}[0] : '1'
                   $-{A}[1] : '3'
                   $-{B}[0] : '2'
                   $-{B}[1] : '4'

               The  keys  of  the  "%-"  hash  correspond  to  all buffer names found in the regular
               expression.

               The behaviour of "%-" is implemented via the [Tie::Hash::NamedCapture](https://www.chedong.com/phpMan.php/perldoc/Tie%3A%3AHash%3A%3ANamedCapture/markdown) module.

               **Note: **"%-" and "%+" are tied views into a common internal hash  associated  with  the
               last  successful  regular  expression.  Therefore mixing iterative access to them via
               "each" may have unpredictable  results.   Likewise,  if  the  last  successful  match
               changes, then the results may be surprising. See "Scoping Rules of Regex Variables".

               This  variable  was  added  in Perl v5.10.0. The "%{^CAPTURE_ALL}" alias was added in
               5.25.7.

               This variable is read-only, and its value is dynamically scoped.

       ${^LAST_SUCCESSFUL_PATTERN}
               The last successful pattern that matched in the current  scope.   The  empty  pattern
               defaults to matching to this. For instance:

                   if (m/foo/ || m/bar/) {
                       s//BLAH/;
                   }

               and

                   if (m/foo/ || m/bar/) {
                       s/${^LAST_SUCCESSFUL_PATTERN}/BLAH/;
                   }

               are equivalent.

               You can use this to debug which pattern matched last, or to match with it again.

               Added in Perl 5.37.10.

       $LAST_REGEXP_CODE_RESULT
       $^R     The  result  of  evaluation  of  the last successful "(?{ code })" regular expression
               assertion (see perlre).

               This variable may be written to, and its value is scoped normally, unlike most  other
               regex variables.

               This variable was added in Perl 5.005.

       ${^RE_COMPILE_RECURSION_LIMIT}
               The current value giving the maximum number of open but unclosed parenthetical groups
               there  may  be  at any point during a regular expression compilation.  The default is
               currently 1000 nested groups.  You may adjust it depending  on  your  needs  and  the
               amount of memory available.

               This variable was added in Perl v5.30.0.

       ${^RE_DEBUG_FLAGS}
               The  current  value  of the regex debugging flags.  Set to 0 for no debug output even
               when the "re 'debug'" module is loaded.  See re for details.

               This variable was added in Perl v5.10.0.

       ${^RE_TRIE_MAXBUF}
               Controls how certain regex  optimisations  are  applied  and  how  much  memory  they
               utilize.   This  value  by  default  is  65536 which corresponds to a 512kB temporary
               cache.  Set this to a higher value to trade memory  for  speed  when  matching  large
               alternations.   Set  it  to  a  lower  value  if  you want the optimisations to be as
               conservative of memory as possible but still occur, and set it to a negative value to
               prevent the optimisation and conserve the most memory.  Under normal situations  this
               variable should be of no interest to you.

               This variable was added in Perl v5.10.0.

### Variables related to filehandles
       Variables  that  depend  on  the  currently  selected  filehandle  may  be  set by calling an
       appropriate object method on the "[IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)" object, although this is  less  efficient  than
       using  the  regular  built-in  variables.   (Summary  lines  below  for this contain the word
       HANDLE.)  First you must say

           use [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown);

       after which you may use either

           method HANDLE EXPR

       or more safely,

           HANDLE->method(EXPR)

       Each method returns the old value of the "[IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)" attribute.  The methods  each  take  an
       optional  EXPR, which, if supplied, specifies the new value for the "[IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)" attribute in
       question.  If not supplied,  most  methods  do  nothing  to  the  current  value--except  for
       autoflush(), which will assume a 1 for you, just to be different.

       Because  loading in the "[IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)" class is an expensive operation, you should learn how to
       use the regular built-in variables.

       A few of these variables are considered "read-only".  This means that if you try to assign to
       this variable, either directly or indirectly through a reference,  you'll  raise  a  run-time
       exception.

       You  should  be  very  careful  when  modifying  the default values of most special variables
       described in this document.  In most cases  you  want  to  localize  these  variables  before
       changing  them,  since  if  you  don't, the change may affect other modules which rely on the
       default values of the special variables that you have changed.  This is one  of  the  correct
       ways to read the whole file at once:

           open my $fh, "<", "foo" or die $!;
           local $/; # enable localized slurp mode
           my $content = <$fh>;
           close $fh;

       But the following code is quite bad:

           open my $fh, "<", "foo" or die $!;
           undef $/; # enable slurp mode
           my $content = <$fh>;
           close $fh;

       since  some other module, may want to read data from some file in the default "line mode", so
       if the code we have just presented has been executed, the global value of $/ is  now  changed
       for any other code running inside the same Perl interpreter.

       Usually  when  a  variable  is  localized  you want to make sure that this change affects the
       shortest scope possible.  So unless you are already inside some short "{}" block, you  should
       create one yourself.  For example:

           my $content = '';
           open my $fh, "<", "foo" or die $!;
           {
               local $/;
               $content = <$fh>;
           }
           close $fh;

       Here is an example of how your own code can go broken:

           for ( 1..3 ){
               $\ = "\r\n";
               nasty_break();
               print "$_";
           }

           sub nasty_break {
               $\ = "\f";
               # do something with $_
           }

       You probably expect this code to print the equivalent of

           "1\r\n2\r\n3\r\n"

       but instead you get:

           "1\f2\f3\f"

       Why?  Because  nasty_break() modifies "$\" without localizing it first.  The value you set in
       nasty_break() is still there when you return.  The fix is to add local() so the value doesn't
       leak out of nasty_break():

           local $\ = "\f";

       It's easy to notice the problem in such a short example, but in more complicated code you are
       looking for trouble if you don't localize changes to the special variables.

       $ARGV   Contains the name of the current file when reading from "<>".

       @ARGV   The array @ARGV contains the command-line arguments intended for the script.   $#ARGV
               is  generally  the  number  of  arguments  minus  one,  because $ARGV[0] is the first
               argument, _not_ the program's command name itself.  See "$0" for the command name.

       ARGV    The special filehandle that iterates over command-line filenames in  @ARGV.   Usually
               written  as  the  null  filehandle  in  the angle operator "<>".  Note that currently
               "ARGV" only has its magical effect within the "<>" operator; elsewhere it is  just  a
               plain  filehandle  corresponding  to  the  last  file opened by "<>".  In particular,
               passing "\*ARGV" as a parameter to a function that expects a filehandle may not cause
               your function to automatically read the contents of all the files in @ARGV.

       ARGVOUT The special filehandle that points to the currently open output file when doing edit-
               in-place processing with **-i**.  Useful when you have to do a lot of inserting and don't
               want to keep modifying $_.  See perlrun for the **-i **switch.

       [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)->output_field_separator( EXPR )
       $OUTPUT_FIELD_SEPARATOR
       $OFS
       $,      The output field separator for the print operator.  If defined, this value is printed
               between each of print's arguments.  Default is "undef".

               You cannot call output_field_separator() on a handle, only as a static  method.   See
               [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown).

               Mnemonic: what is printed when there is a "," in your print statement.

       HANDLE->input_line_number( EXPR )
       $INPUT_LINE_NUMBER
       $NR
       $.      Current line number for the last filehandle accessed.

               Each  filehandle  in  Perl  counts  the  number of lines that have been read from it.
               (Depending on the value of $/, Perl's idea of what constitutes a line may  not  match
               yours.)   When  a  line  is  read from a filehandle (via readline() or "<>"), or when
               tell() or seek() is called on it, $. becomes an alias to the line  counter  for  that
               filehandle.

               You  can  adjust  the counter by assigning to $., but this will not actually move the
               seek pointer.  _Localizing_ _$._ _will_ _not_ _localize_ _the_ _filehandle's_ _line_ _count_.  Instead,
               it will localize perl's notion of which filehandle $. is currently aliased to.

               $. is reset when the filehandle is  closed,  but  **not  **when  an  open  filehandle  is
               reopened  without  an  intervening close().  For more details, see "I/O Operators" in
               perlop.  Because "<>" never does an explicit  close,  line  numbers  increase  across
               "ARGV" files (but see examples in "eof" in perlfunc).

               You  can  also use "HANDLE->input_line_number(EXPR)" to access the line counter for a
               given filehandle without having to worry about which handle you last accessed.

               Mnemonic: many programs use "." to mean the current line number.

       [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)->input_record_separator( EXPR )
       $INPUT_RECORD_SEPARATOR
       $RS
       $/      The input record separator, newline by default.  This influences Perl's idea of  what
               a  "line"  is.   Works  like  **awk**'s  RS variable, including treating empty lines as a
               terminator if set to the null string (an empty line  cannot  contain  any  spaces  or
               tabs).   You  may  set  it  to  a  multi-character  string to match a multi-character
               terminator, or to "undef" to read through the end of  file.   Setting  it  to  "\n\n"
               means  something  slightly  different  than  setting  to  "",  if  the  file contains
               consecutive empty lines.  Setting to "" will treat  two  or  more  consecutive  empty
               lines  as  a  single empty line.  Setting to "\n\n" will blindly assume that the next
               input character belongs to the next paragraph, even if it's a newline.

                   local $/;           # enable "slurp" mode
                   local $_ = <FH>;    # whole file now here
                   s/\n[ \t]+/ /g;

               Remember: the value of $/ is a string, not  a  regex.   **awk  **has  to  be  better  for
               something. :-)

               Setting  $/  to  an  empty  string  -- the so-called _paragraph_ _mode_ -- merits special
               attention.  When $/ is set to "" and the entire file is read in  with  that  setting,
               any  sequence  of  one  or  more consecutive newlines at the beginning of the file is
               discarded.  With the exception of the final record in  the  file,  each  sequence  of
               characters  ending in two or more newlines is treated as one record and is read in to
               end in exactly two newlines.  If the last record in the file  ends  in  zero  or  one
               consecutive  newlines,  that  record is read in with that number of newlines.  If the
               last record ends in two or more consecutive newlines, it is read in with two newlines
               like all preceding records.

               Suppose we wrote the following string to a file:

                   my $string = "\n\n\n";
                   $string .= "alpha beta\ngamma delta\n\n\n";
                   $string .= "epsilon zeta eta\n\n";
                   $string .= "theta\n";

                   my $file = 'simple_file.txt';
                   open my $OUT, '>', $file or die;
                   print $OUT $string;
                   close $OUT or die;

               Now we read that file in paragraph mode:

                   local $/ = ""; # paragraph mode
                   open my $IN, '<', $file or die;
                   my @records = <$IN>;
                   close $IN or die;

               @records will consist of these 3 strings:

                   (
                     "alpha beta\ngamma delta\n\n",
                     "epsilon zeta eta\n\n",
                     "theta\n",
                   )

               Setting $/ to a reference to an integer, scalar  containing  an  integer,  or  scalar
               that's  convertible to an integer will attempt to read records instead of lines, with
               the maximum record size being the referenced integer number of characters.  So this:

                   local $/ = \32768; # or \"32768", or \$var_containing_32768
                   open my $fh, "<", $myfile or die $!;
                   local $_ = <$fh>;

               will read a record of no more than 32768 characters from $fh.  If you're not  reading
               from  a  record-oriented  file  (or your OS doesn't have record-oriented files), then
               you'll likely get a full chunk of data with every read.  If a record is  larger  than
               the  record size you've set, you'll get the record back in pieces.  Trying to set the
               record size to zero or less is deprecated and will cause $/  to  have  the  value  of
               "undef", which will cause reading in the (rest of the) whole file.

               As  of 5.19.9 setting $/ to any other form of reference will throw a fatal exception.
               This is in preparation for supporting new ways to set $/ in the future.

               On VMS only, record reads bypass PerlIO layers and any associated buffering,  so  you
               must  not  mix record and non-record reads on the same filehandle.  Record mode mixes
               with line mode only when the same buffering layer is in use for both modes.

               You cannot call input_record_separator() on a handle, only as a static  method.   See
               [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown).

               See also "Newlines" in perlport.  Also see "$.".

               Mnemonic: / delimits line boundaries when quoting poetry.

       [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)->output_record_separator( EXPR )
       $OUTPUT_RECORD_SEPARATOR
       $ORS
       $\      The  output  record  separator  for  the  print  operator.  If defined, this value is
               printed after the last of print's arguments.  Default is "undef".

               You cannot call output_record_separator() on a handle, only as a static method.   See
               [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown).

               Mnemonic:  you  set  "$\" instead of adding "\n" at the end of the print.  Also, it's
               just like $/, but it's what you get "back" from Perl.

       HANDLE->autoflush( EXPR )
       $OUTPUT_AUTOFLUSH
       $|      If set to nonzero, forces a flush right away and after every write or  print  on  the
               currently  selected  output channel.  Default is 0 (regardless of whether the channel
               is really buffered by the system or not; $| tells you only whether you've asked  Perl
               explicitly  to  flush  after  each write).  STDOUT will typically be line buffered if
               output is to the terminal and block buffered otherwise.   Setting  this  variable  is
               useful  primarily  when  you are outputting to a pipe or socket, such as when you are
               running a Perl program under **rsh **and want to see the output as it's happening.   This
               has  no effect on input buffering.  See "getc" in perlfunc for that.  See "select" in
               perlfunc on how to select the output channel.  See also [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown).

               Mnemonic: when you want your pipes to be piping hot.

       ${^LAST_FH}
               This read-only variable contains a reference to the last-read  filehandle.   This  is
               set  by  "<HANDLE>",  "readline",  "tell", "eof" and "seek".  This is the same handle
               that $. and "tell" and "eof" without arguments use.  It is also the handle used  when
               Perl appends ", <STDIN> line 1" to an error or warning message.

               This variable was added in Perl v5.18.0.

       _Variables_ _related_ _to_ _formats_

       The  special  variables  for formats are a subset of those for filehandles.  See perlform for
       more information about Perl's formats.

       $ACCUMULATOR
       $^A     The current value of the write() accumulator for format() lines.  A  format  contains
               formline()  calls  that put their result into $^A.  After calling its format, write()
               prints out the contents of $^A and empties.  So you never really see the contents  of
               $^A  unless  you  call  formline()  yourself  and  then look at it.  See perlform and
               "formline PICTURE,LIST" in perlfunc.

       [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)->format_formfeed(EXPR)
       $FORMAT_FORMFEED
       $^L     What formats output as a form feed.  The default is "\f".

               You cannot call format_formfeed()  on  a  handle,  only  as  a  static  method.   See
               [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown).

       HANDLE->format_page_number(EXPR)
       $FORMAT_PAGE_NUMBER
       $%      The current page number of the currently selected output channel.

               Mnemonic: "%" is page number in **nroff**.

       HANDLE->format_lines_left(EXPR)
       $FORMAT_LINES_LEFT
       $-      The number of lines left on the page of the currently selected output channel.

               Mnemonic: lines_on_page - lines_printed.

       [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown)->format_line_break_characters EXPR
       $FORMAT_LINE_BREAK_CHARACTERS
       $:      The current set of characters after which a string may be broken to fill continuation
               fields  (starting with "^") in a format.  The default is " \n-", to break on a space,
               newline, or a hyphen.

               You cannot call format_line_break_characters() on a handle, only as a static  method.
               See [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown).

               Mnemonic: a "colon" in poetry is a part of a line.

       HANDLE->format_lines_per_page(EXPR)
       $FORMAT_LINES_PER_PAGE
       $=      The  current  page length (printable lines) of the currently selected output channel.
               The default is 60.

               Mnemonic: = has horizontal lines.

       HANDLE->format_top_name(EXPR)
       $FORMAT_TOP_NAME
       $^      The name of the current top-of-page format for the currently selected output channel.
               The default is the name of the filehandle with "_TOP"  appended.   For  example,  the
               default format top name for the "STDOUT" filehandle is "STDOUT_TOP".

               Mnemonic: points to top of page.

       HANDLE->format_name(EXPR)
       $FORMAT_NAME
       $~      The name of the current report format for the currently selected output channel.  The
               default  format  name  is  the same as the filehandle name.  For example, the default
               format name for the "STDOUT" filehandle is just "STDOUT".

               Mnemonic: brother to $^.

### Error Variables
       The variables $@, $!, $^E,  and  $?  contain  information  about  different  types  of  error
       conditions  that  may  appear  during  execution  of a Perl program.  The variables are shown
       ordered by the "distance" between the  subsystem  which  reported  the  error  and  the  Perl
       process.   They  correspond  to errors detected by the Perl interpreter, C library, operating
       system, or an external program, respectively.

       To  illustrate  the  differences  between  these  variables,  consider  the  following   Perl
       expression,  which  uses a single-quoted string.  After execution of this statement, perl may
       have set all four special error variables:

           eval q{
               open my $pipe, "/cdrom/install |" or die $!;
               my @res = <$pipe>;
               close $pipe or die "bad pipe: $?, $!";
           };

       When perl executes the eval() expression, it translates the  open(),  "<PIPE>",  and  "close"
       calls  in  the C run-time library and thence to the operating system kernel.  perl sets $! to
       the C library's "errno" if one of these calls fails.

       $@ is set if the string to be "eval"-ed did not compile (this may happen if "open" or "close"
       were imported with bad prototypes), or if Perl code executed during  evaluation  die()d.   In
       these  cases  the  value  of  $@  is  the compile error, or the argument to "die" (which will
       interpolate $! and $?).  (See also Fatal, though.)

       Under a few operating systems, $^E may contain a more verbose error  indicator,  such  as  in
       this  case,  "CDROM  tray  not  closed."  Systems that do not support extended error messages
       leave $^E the same as $!.

       Finally, $? may be set to a non-0 value if the external program  _/cdrom/install_  fails.   The
       upper  eight bits reflect specific error conditions encountered by the program (the program's
       exit() value).  The lower eight bits reflect mode of failure, like signal death and core dump
       information.  See [**wait**(2)](https://www.chedong.com/phpMan.php/man/wait/2/markdown) for details.  In contrast to $! and $^E, which are set only  if  an
       error  condition  is  detected,  the  variable  $?  is  set  on  each "wait" or pipe "close",
       overwriting the old value.  This is more like $@, which on every  eval()  is  always  set  on
       failure and cleared on success.

       For more details, see the individual descriptions at $@, $!, $^E, and $?.

       ${^CHILD_ERROR_NATIVE}
               The  native status returned by the last pipe close, backtick (``) command, successful
               call to wait() or waitpid(), or from the system() operator.   On  POSIX-like  systems
               this  value  can  be  decoded with the WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG,
               WIFSTOPPED, and WSTOPSIG functions provided by the POSIX module.

               Under VMS this reflects the actual VMS exit status; i.e. it is the same  as  $?  when
               the pragma "use vmsish 'status'" is in effect.

               This variable was added in Perl v5.10.0.

       $EXTENDED_OS_ERROR
       $^E     Error  information  specific  to  the  current operating system.  At the moment, this
               differs from "$!" under only VMS, OS/2, and Win32 (and for MacPerl).   On  all  other
               platforms, $^E is always just the same as $!.

               Under  VMS,  $^E  provides  the VMS status value from the last system error.  This is
               more specific information about the last system error than that provided by $!.  This
               is particularly important when $!  is set to **EVMSERR**.

               Under OS/2, $^E is set to the error code of the last call to OS/2 API either via CRT,
               or directly from perl.

               Under Win32, $^E always returns the last error information reported by the Win32 call
               GetLastError() which describes the last  error  from  within  the  Win32  API.   Most
               Win32-specific  code  will  report  errors  via  $^E.  ANSI C and Unix-like calls set
               "errno" and so most portable Perl code will report errors via $!.

               Caveats mentioned in the description of "$!" generally apply to $^E, also.

               This variable was added in Perl 5.003.

               Mnemonic: Extra error explanation.

       $EXCEPTIONS_BEING_CAUGHT
       $^S     Current state of the interpreter.

                   $^S         State
                   ---------   -------------------------------------
                   undef       Parsing module, eval, or main program
                   true (1)    Executing an eval or try block
                   false (0)   Otherwise

               The first state may happen in $SIG{__DIE__} and $SIG{__WARN__} handlers.

               The English name $EXCEPTIONS_BEING_CAUGHT is slightly misleading, because the "undef"
               value does not indicate whether exceptions are being caught, since compilation of the
               main program does not catch exceptions.

               This variable was added in Perl 5.004.

       $WARNING
       $^W     The current value of the warning  switch,  initially  true  if  **-w  **was  used,  false
               otherwise, but directly modifiable.

               See also warnings.

               Mnemonic: related to the **-w **switch.

       ${^WARNING_BITS}
               The  current  set of warning checks enabled by the "use warnings" pragma.  It has the
               same scoping as the $^H  and  "%^H"  variables.   The  exact  values  are  considered
               internal to the warnings pragma and may change between versions of Perl.

               Each   time   a   statement   completes   being   compiled,   the  current  value  of
               "${^WARNING_BITS}" is stored with that statement, and  can  later  be  retrieved  via
               "(caller($level))[9]".

               This variable was added in Perl v5.6.0.

       $OS_ERROR
       $ERRNO
       $!      When  referenced,  $!  retrieves the current value of the C "errno" integer variable.
               If $! is assigned  a  numerical  value,  that  value  is  stored  in  "errno".   When
               referenced as a string, $! yields the system error string corresponding to "errno".

               Many  system  or  library  calls  set  "errno" if they fail, to indicate the cause of
               failure.  They usually do **not **set "errno" to zero if they succeed and may set "errno"
               to a non-zero value on success.  This means "errno", hence  $!,  is  meaningful  only
               _immediately_ after a **failure**:

                   if (open my $fh, "<", $filename) {
                       # Here $! is meaningless.
                       ...
                   }
                   else {
                       # ONLY here is $! meaningful.
                       ...
                       # Already here $! might be meaningless.
                   }
                   # Since here we might have either success or failure,
                   # $! is meaningless.

               Here,  _meaningless_  means  that  $!  may  be  unrelated  to the outcome of the open()
               operator.  Assignment to $! is similarly  ephemeral.   It  can  be  used  immediately
               before  invoking  the die() operator, to set the exit value, or to inspect the system
               error string corresponding to error _n_, or to restore $! to a meaningful state.

               Perl itself may set "errno" to a non-zero on  failure  even  if  no  system  call  is
               performed.

               Mnemonic: What just went bang?

       %OS_ERROR
       %ERRNO
       %!      Each  element of "%!" has a true value only if $! is set to that value.  For example,
               $!{ENOENT} is true if and only if the current value of $! is "ENOENT";  that  is,  if
               the  most  recent error was "No such file or directory" (or its moral equivalent: not
               all operating systems give that exact error, and certainly not all  languages).   The
               specific true value is not guaranteed, but in the past has generally been the numeric
               value  of $!.  To check if a particular key is meaningful on your system, use "exists
               $!{the_key}"; for a  list  of  legal  keys,  use  "keys  %!".   See  Errno  for  more
               information, and also see "$!".

               This variable was added in Perl 5.005.

       $CHILD_ERROR
       $?      The status returned by the last pipe close, backtick (``) command, successful call to
               wait()  or  waitpid(), or from the system() operator.  This is just the 16-bit status
               word returned by the traditional Unix wait() system call (or else is made up to  look
               like it).  Thus, the exit value of the subprocess is really ($? >> 8), and "$? & 127"
               gives  which  signal,  if  any, the process died from, and "$? & 128" reports whether
               there was a core dump.

               Additionally, if the "h_errno" variable is supported in C, its value is returned  via
               $? if any "gethost*()" function fails.

               If you have installed a signal handler for "SIGCHLD", the value of $? will usually be
               wrong outside that handler.

               Inside an "END" subroutine $? contains the value that is going to be given to exit().
               You  can  modify $? in an "END" subroutine to change the exit status of your program.
               For example:

                   END {
                       $? = 1 if $? == 255;  # die would make it 255
                   }

               Under VMS, the pragma "use vmsish 'status'" makes $?  reflect  the  actual  VMS  exit
               status,  instead  of  the  default emulation of POSIX status; see "$?" in perlvms for
               details.

               Mnemonic: similar to **sh **and **ksh**.

       $EVAL_ERROR
       $@      The Perl error from the last "eval"  operator,  i.e.  the  last  exception  that  was
               caught.   For  "eval  BLOCK", this is either a runtime error message or the string or
               reference "die" was called with.  The "eval STRING" form also catches  syntax  errors
               and other compile time exceptions.

               If no error occurs, "eval" sets $@ to the empty string.

               Warning  messages  are  not  collected  in this variable.  You can, however, set up a
               routine to process warnings by setting $SIG{__WARN__} as described in "%SIG".

               Mnemonic: Where was the error "at"?

### Variables related to the interpreter state
       These variables provide information about the current interpreter state.

       $COMPILING
       $^C     The current value of the flag associated with the **-c  **switch.   Mainly  of  use  with
               **-MO=...  **to allow code to alter its behavior when being compiled, such as for example
               to "AUTOLOAD" at compile time rather than normal, deferred loading.  Setting  "$^C  =
               1" is similar to calling "[B::minus_c](https://www.chedong.com/phpMan.php/perldoc/B%3A%3Aminusc/markdown)".

               This variable was added in Perl v5.6.0.

       $DEBUGGING
       $^D     The current value of the debugging flags.  May be read or set.  Like its command-line
               equivalent,  you can use numeric or symbolic values, e.g. "$^D = 10" or "$^D = "st"".
               See "**-D_**number_" in perlrun.  The contents of this variable also affects  the  debugger
               operation.  See "Debugger Internals" in perldebguts.

               Mnemonic: value of **-D **switch.

       ${^GLOBAL_PHASE}
               The current phase of the perl interpreter.

               Possible values are:

               CONSTRUCT
                       The "PerlInterpreter*" is being constructed via "perl_construct".  This value
                       is  mostly  there  for completeness and for use via the underlying C variable
                       "PL_phase".  It's not really possible for Perl code  to  be  executed  unless
                       construction of the interpreter is finished.

               START   This  is  the  global  compile-time.  That includes, basically, every "BEGIN"
                       block executed directly or indirectly from during  the  compile-time  of  the
                       top-level program.

                       This  phase  is not called "BEGIN" to avoid confusion with "BEGIN"-blocks, as
                       those are executed during compile-time of any compilation unit, not just  the
                       top-level  program.   A  new, localised compile-time entered at run-time, for
                       example by constructs as "eval "use SomeModule"" are not  global  interpreter
                       phases, and therefore aren't reflected by "${^GLOBAL_PHASE}".

               CHECK   Execution of any "CHECK" blocks.

               INIT    Similar to "CHECK", but for "INIT"-blocks, not "CHECK" blocks.

               RUN     The main run-time, i.e. the execution of "PL_main_root".

               END     Execution of any "END" blocks.

               DESTRUCT
                       Global destruction.

               Also  note  that there's no value for UNITCHECK-blocks.  That's because those are run
               for each compilation unit individually, and therefore is  not  a  global  interpreter
               phase.

               Not  every program has to go through each of the possible phases, but transition from
               one phase to another can only happen in the order described in the above list.

               An example of all of the phases Perl code can see:

                   BEGIN { print "compile-time: ${^GLOBAL_PHASE}\n" }

                   INIT  { print "init-time: ${^GLOBAL_PHASE}\n" }

                   CHECK { print "check-time: ${^GLOBAL_PHASE}\n" }

                   {
                       package [Print::Phase](https://www.chedong.com/phpMan.php/perldoc/Print%3A%3APhase/markdown);

                       sub new {
                           my ($class, $time) = @_;
                           return bless \$time, $class;
                       }

                       sub DESTROY {
                           my $self = shift;
                           print "$$self: ${^GLOBAL_PHASE}\n";
                       }
                   }

                   print "run-time: ${^GLOBAL_PHASE}\n";

                   my $runtime = [Print::Phase](https://www.chedong.com/phpMan.php/perldoc/Print%3A%3APhase/markdown)->new(
                       "lexical variables are garbage collected before END"
                   );

                   END   { print "end-time: ${^GLOBAL_PHASE}\n" }

                   our $destruct = [Print::Phase](https://www.chedong.com/phpMan.php/perldoc/Print%3A%3APhase/markdown)->new(
                       "package variables are garbage collected after END"
                   );

               This will print out

                   compile-time: START
                   check-time: CHECK
                   init-time: INIT
                   run-time: RUN
                   lexical variables are garbage collected before END: RUN
                   end-time: END
                   package variables are garbage collected after END: DESTRUCT

               This variable was added in Perl 5.14.0.

       $^H     WARNING: This  variable  is  strictly  for  internal  use  only.   Its  availability,
               behavior, and contents are subject to change without notice.

               This  variable  contains  compile-time hints for the Perl interpreter.  At the end of
               compilation of a BLOCK the value of this variable is restored to the value  when  the
               interpreter started to compile the BLOCK.

               Each  time  a  statement completes being compiled, the current value of $^H is stored
               with that statement, and can  later  be  retrieved  via  "(caller($level))[8]".   See
               "caller EXPR" in perlfunc.

               When  perl  begins  to parse any block construct that provides a lexical scope (e.g.,
               eval body, required file, subroutine body, loop  body,  or  conditional  block),  the
               existing  value  of  $^H  is  saved,  but  its  value  is  left  unchanged.  When the
               compilation of the block is completed, it  regains  the  saved  value.   Between  the
               points  where its value is saved and restored, code that executes within BEGIN blocks
               is free to change the value of $^H.

               This behavior provides the semantic of lexical scoping, and is used in, for instance,
               the "use strict" pragma.

               The contents should be an integer; different  bits  of  it  are  used  for  different
               pragmatic flags.  Here's an example:

                   sub add_100 { $^H |= 0x100 }

                   sub foo {
                       BEGIN { add_100() }
                       bar->baz($boon);
                   }

               Consider  what  happens during execution of the BEGIN block.  At this point the BEGIN
               block has already been compiled, but the body of foo() is still being compiled.   The
               new  value  of  $^H  will  therefore be visible only while the body of foo() is being
               compiled.

               Substitution of "BEGIN { add_100() }" block with:

                   BEGIN { require strict; strict->import('vars') }

               demonstrates how "use strict 'vars'" is implemented.  Here's a conditional version of
               the same lexical pragma:

                   BEGIN {
                       require strict; strict->import('vars') if $condition
                   }

               This variable was added in Perl 5.003.

       %^H     The "%^H" hash provides the same scoping semantics as $^H.  This makes it useful  for
               implementing  lexically  scoped  pragmas.   See  perlpragma.   All  the  entries  are
               stringified when accessed at runtime, so only  simple  values  can  be  accommodated.
               This means no references to objects, for example.

               Each  time a statement completes being compiled, the current value of "%^H" is stored
               with that statement, and can later  be  retrieved  via  "(caller($level))[10]".   See
               "caller EXPR" in perlfunc.

               When  putting items into "%^H", in order to avoid conflicting with other users of the
               hash there is a convention regarding which keys to use.  A  module  should  use  only
               keys  that  begin  with  the  module's  name (the name of its main package) and a "/"
               character.  For example, a module "[Foo::Bar](https://www.chedong.com/phpMan.php/perldoc/Foo%3A%3ABar/markdown)" should use keys such as "[Foo::Bar](https://www.chedong.com/phpMan.php/perldoc/Foo%3A%3ABar/markdown)/baz".

               This variable was added in Perl v5.6.0.

       ${^OPEN}
               An internal variable used by PerlIO.  A string in two  parts,  separated  by  a  "\0"
               byte, the first part describes the input layers, the second part describes the output
               layers.

               This  is  the  mechanism that applies the lexical effects of the open pragma, and the
               main program scope effects of the "io" or "D" options for the -C command-line  switch
               and PERL_UNICODE environment variable.

               The  functions  accept(), open(), pipe(), readpipe() (as well as the related "qx" and
               `STRING` operators), socket(),  socketpair(),  and  sysopen()  are  affected  by  the
               lexical  value of this variable.  The implicit "ARGV" handle opened by readline() (or
               the related "<>" and "<<>>" operators) on passed filenames is also affected (but  not
               if  it  opens  "STDIN").   If  this variable is not set, these functions will set the
               default layers as described in "Defaults and how to override them" in PerlIO.

               open() ignores this variable (and the default layers) when called  with  3  arguments
               and  explicit  layers  are  specified.  Indirect calls to these functions via modules
               like [IO::Handle](https://www.chedong.com/phpMan.php/perldoc/IO%3A%3AHandle/markdown) are not  affected  as  they  occur  in  a  different  lexical  scope.
               Directory handles such as opened by opendir() are not currently affected.

               This variable was added in Perl v5.8.0.

       $PERLDB
       $^P     The  internal  variable  for debugging support.  The meanings of the various bits are
               subject to change, but currently indicate:

               0x01  Debug subroutine enter/exit.

               0x02  Line-by-line debugging.  Causes [DB::DB](https://www.chedong.com/phpMan.php/perldoc/DB%3A%3ADB/markdown)()  subroutine  to  be  called  for  each
                     statement executed.  Also causes saving source code lines (like 0x400).

               0x04  Switch off optimizations.

               0x08  Preserve more data for future interactive inspections.

               0x10  Keep info about source lines on which a subroutine is defined.

               0x20  Start with single-step on.

               0x40  Use subroutine address instead of name when reporting.

               0x80  Report "goto &subroutine" as well.

               0x100 Provide  informative  "file"  names  for  evals  based  on  the place they were
                     compiled.

               0x200 Provide informative names to anonymous subroutines based on the place they were
                     compiled.

               0x400 Save source code lines into "@{"_<$filename"}".

               0x800 When saving source, include evals that generate no subroutines.

               0x1000
                     When saving source, include source that did not compile.

               Some bits may be relevant at compile-time only, some at run-time only.  This is a new
               mechanism and the details may change.  See also perldebguts.

       ${^TAINT}
               Reflects if taint mode is on or off.  1 for on (the program was run with **-T**),  0  for
               off, -1 when only taint warnings are enabled (i.e. with **-t **or **-TU**).

               Note:  if  your  perl was built without taint support (see perlsec), then "${^TAINT}"
               will always be 0, even if the program was run with **-T**).

               This variable is read-only.

               This variable was added in Perl v5.8.0.

       ${^SAFE_LOCALES}
               Reflects if safe locale operations are available to this perl (when the value  is  1)
               or  not  (the  value  is 0).  This variable is always 1 if the perl has been compiled
               without threads.  It is also 1 if this perl is using thread-safe  locale  operations.
               Note that an individual thread may choose to use the global locale (generally unsafe)
               by  calling  "switch_to_global_locale"  in perlapi.  This variable currently is still
               set to 1 in such threads.

               This variable is read-only.

               This variable was added in Perl v5.28.0.

       ${^UNICODE}
               Reflects certain Unicode settings of Perl.  See perlrun documentation  for  the  "-C"
               switch for more information about the possible values.

               This variable is set during Perl startup and is thereafter read-only.

               This variable was added in Perl v5.8.2.

       ${^UTF8CACHE}
               This variable controls the state of the internal UTF-8 offset caching code.  1 for on
               (the  default),  0  for off, -1 to debug the caching code by checking all its results
               against linear scans, and panicking on any discrepancy.

               This variable was added in Perl v5.8.9.  It is subject to change or  removal  without
               notice,  but  is  currently  used to avoid recalculating the boundaries of multi-byte
               UTF-8-encoded characters.

       ${^UTF8LOCALE}
               This variable indicates whether a UTF-8 locale was detected by perl at startup.  This
               information is used by perl when it's in adjust-utf8ness-to-locale mode (as when  run
               with the "-CL" command-line switch); see perlrun for more info on this.

               This variable was added in Perl v5.8.8.

### Deprecated and removed variables
       Deprecating  a variable announces the intent of the perl maintainers to eventually remove the
       variable from the language.   It  may  still  be  available  despite  its  status.   Using  a
       deprecated variable triggers a warning.

       Once  a  variable  is  removed,  its  use  triggers  an  error  telling  you  the variable is
       unsupported.

       See perldiag for details about error messages.

       $#      $# was a variable that could be used to format printed numbers.  After a  deprecation
               cycle, its magic was removed in Perl v5.10.0 and using it now triggers a warning: "$#
               is no longer supported".

               This  is  not the sigil you use in front of an array name to get the last index, like
               $#array.  That's still how you get the last index of an array in Perl.  The two  have
               nothing to do with each other.

               Deprecated in Perl 5.

               Removed in Perl v5.10.0.

       $*      $*  was  a  variable  that  you  could  use  to  enable  multiline matching.  After a
               deprecation cycle, its magic was removed in Perl v5.10.0.  Using it  now  triggers  a
               warning:  "$*  is  no  longer  supported".   You  should use the "/s" and "/m" regexp
               modifiers instead.

               Deprecated in Perl 5.

               Removed in Perl v5.10.0.

       $[      This variable stores the index of the first element in an array,  and  of  the  first
               character  in a substring.  The default is 0, but you could theoretically set it to 1
               to make Perl behave more like **awk **(or Fortran) when subscripting and when  evaluating
               the **index() **and **substr() **functions.

               As  of  release  5  of Perl, assignment to $[ is treated as a compiler directive, and
               cannot influence the behavior of any other file.  (That's why  you  can  only  assign
               compile-time constants to it.)  Its use is highly discouraged.

               Prior  to  Perl  v5.10.0, assignment to $[ could be seen from outer lexical scopes in
               the same file, unlike other compile-time directives (such as strict).  Using  **local()**
               on  it  would bind its value strictly to a lexical block.  Now it is always lexically
               scoped.

               As of Perl v5.16.0, it is implemented by the arybase module.

               As of Perl v5.30.0, or under "use v5.16", or "no feature "array_base"", $[ no  longer
               has any effect, and always contains 0.  Assigning 0 to it is permitted, but any other
               value will produce an error.

               Mnemonic: [ begins subscripts.

               Deprecated in Perl v5.12.0.

       ${^ENCODING}
               This variable is no longer supported.

               It  used to hold the _object_ _reference_ to the "Encode" object that was used to convert
               the source code to Unicode.

               Its purpose was to allow your non-ASCII Perl scripts not to have  to  be  written  in
               UTF-8;  this was useful before editors that worked on UTF-8 encoded text were common,
               but that was long ago.  It caused problems, such as affecting the operation of  other
               modules that weren't expecting it, causing general mayhem.

               If  you  need  something  like  this  functionality, it is recommended that use you a
               simple source filter, such as [Filter::Encoding](https://www.chedong.com/phpMan.php/perldoc/Filter%3A%3AEncoding/markdown).

               If you are coming here because code of yours is being adversely affected by someone's
               use of this variable, you can usually work around it by doing this:

                local ${^ENCODING};

               near the beginning of the functions that are  getting  broken.   This  undefines  the
               variable during the scope of execution of the including function.

               This  variable was added in Perl 5.8.2 and removed in 5.26.0.  Setting it to anything
               other than "undef" was made fatal in Perl 5.28.0.

       ${^WIN32_SLOPPY_STAT}
               This variable no longer has any function.

               This variable was added in Perl v5.10.0 and removed in Perl v5.34.0.

perl v5.38.2                                 2026-08-18                                   [_PERLVAR_(1)](https://www.chedong.com/phpMan.php/man/PERLVAR/1/markdown)
