+The subscript separator for multidimensional array emulation. If you
+refer to a hash element as
+
+ $foo{$a,$b,$c}
+
+it really means
+
+ $foo{join($;, $a, $b, $c)}
+
+But don't put
+
+ @foo{$a,$b,$c} # a slice--note the @
+
+which means
+
+ ($foo{$a},$foo{$b},$foo{$c})
+
+Default is "\034", the same as SUBSEP in B<awk>. If your keys contain
+binary data there might not be any safe value for C<$;>.
+
+Consider using "real" multidimensional arrays as described
+in L<perllol>.
+
+Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.
+
+=item $a
+
+=item $b
+X<$a> X<$b>
+
+Special package variables when using C<sort()>, see L<perlfunc/sort>.
+Because of this specialness C<$a> and C<$b> don't need to be declared
+(using C<use vars>, or C<our()>) even when using the C<strict 'vars'>
+pragma. Don't lexicalize them with C<my $a> or C<my $b> if you want to
+be able to use them in the C<sort()> comparison block or function.
+
+=item %ENV
+X<%ENV>
+
+The hash C<%ENV> contains your current environment. Setting a
+value in C<ENV> changes the environment for any child processes
+you subsequently C<fork()> off.
+
+=item $SYSTEM_FD_MAX
+
+=item $^F
+X<$^F> X<$SYSTEM_FD_MAX>
+
+The maximum system file descriptor, ordinarily 2. System file
+descriptors are passed to C<exec()>ed processes, while higher file
+descriptors are not. Also, during an
+C<open()>, system file descriptors are
+preserved even if the C<open()> fails (ordinary file descriptors are
+closed before the C<open()> is attempted). The close-on-exec
+status of a file descriptor will be decided according to the value of
+C<$^F> when the corresponding file, pipe, or socket was opened, not the
+time of the C<exec()>.
+
+=item @F
+X<@F>
+
+The array C<@F> contains the fields of each line read in when autosplit
+mode is turned on. See L<perlrun> for the B<-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 C<strict 'vars'>.
+
+=item @INC
+X<@INC>
+
+The array C<@INC> contains the list of places that the C<do EXPR>,
+C<require>, or C<use> constructs look for their library files. It
+initially consists of the arguments to any B<-I> command-line
+switches, followed by the default Perl library, probably
+F</usr/local/lib/perl>, followed by ".", to represent the current
+directory. ("." will not be appended if taint checks are enabled,
+either by C<-T> or by C<-t>.) If you need to modify this at runtime,
+you should use the C<use lib> pragma to get the machine-dependent
+library properly loaded also:
+
+ use lib '/mypath/libdir/';
+ use SomeMod;
+
+You can also insert hooks into the file inclusion system by putting Perl
+code directly into C<@INC>. Those hooks may be subroutine references,
+array references or blessed objects. See L<perlfunc/require> for details.
+
+=item %INC
+X<%INC>
+
+The hash C<%INC> contains entries for each filename included via the
+C<do>, C<require>, or C<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 C<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
+L<perlfunc/require> for a description of these hooks), this hook is
+by default inserted into C<%INC> in place of a filename. Note, however,
+that the hook may have set the C<%INC> entry by itself to provide some more
+specific info.
+
+=item $INPLACE_EDIT
+
+=item $^I
+X<$^I> X<$INPLACE_EDIT>
+
+The current value of the inplace-edit extension. Use C<undef> to disable
+inplace editing.
+
+Mnemonic: value of B<-i> switch.
+
+=item $^M
+X<$^M>
+
+By default, running out of memory is an untrappable, fatal error.
+However, if suitably built, Perl can use the contents of C<$^M>
+as an emergency memory pool after C<die()>ing. Suppose that your Perl
+were compiled with C<-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
+F<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 L<English|English> long name for
+this variable.
+
+This variable was added in Perl 5.004.
+
+=item $OSNAME
+
+=item $^O
+X<$^O> X<$OSNAME>
+
+The name of the operating system under which this copy of Perl was
+built, as determined during the configuration process. For examples
+see L<perlport/PLATFORMS>.
+
+The value is identical to C<$Config{'osname'}>. See also L<Config>
+and the B<-V> command-line switch documented in L<perlrun>.
+
+In Windows platforms, C<$^O> is not very helpful: since it is always
+C<MSWin32>, it doesn't tell the difference between
+95/98/ME/NT/2000/XP/CE/.NET. Use C<Win32::GetOSName()> or
+Win32::GetOSVersion() (see L<Win32> and L<perlport>) to distinguish
+between the variants.
+
+This variable was added in Perl 5.003.
+
+=item %SIG
+X<%SIG>
+
+The hash C<%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);
+ }
+
+ $SIG{'INT'} = \&handler;
+ $SIG{'QUIT'} = \&handler;
+ ...
+ $SIG{'INT'} = 'DEFAULT'; # restore default action
+ $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT
+
+Using a value of C<'IGNORE'> usually has the effect of ignoring the
+signal, except for the C<CHLD> signal. See L<perlipc> for more about
+this special case.
+
+Here are some other examples:
+
+ $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (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.
+
+If your system has the C<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 L<perlipc> for more information.
+
+Certain internal hooks can be also set using the C<%SIG> hash. The
+routine indicated by C<$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 C<__WARN__> hook causes the
+ordinary printing of warnings to C<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 C<'IGNORE'> hook is not supported by C<__WARN__>, you can
+disable warnings using the empty subroutine:
+
+ local $SIG{__WARN__} = sub {};
+
+The routine indicated by C<$SIG{__DIE__}> is called when a fatal
+exception is about to be thrown. The error message is passed as the
+first argument. When a C<__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 C<goto &sub>, a loop exit,
+or a C<die()>. The C<__DIE__> handler is explicitly disabled during
+the call, so that you can die from a C<__DIE__> handler. Similarly
+for C<__WARN__>.
+
+Due to an implementation glitch, the C<$SIG{__DIE__}> hook is called
+even inside an C<eval()>. Do not use this to rewrite a pending
+exception in C<$@>, or as a bizarre substitute for overriding
+C<CORE::GLOBAL::die()>. This strange action at a distance may be fixed
+in a future release so that C<$SIG{__DIE__}> is only called if your
+program is about to exit, as was the original intent. Any other use is
+deprecated.
+
+C<__DIE__>/C<__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("Something wrong") if defined &Carp::confess;
+ 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 C<Carp> I<unless> it is the parser who
+called the handler. The second line will print backtrace and die if
+C<Carp> was available. The third line will be executed only if C<Carp> was
+not available.
+
+Having to even think about the C<$^S> variable in your exception
+handlers is simply wrong. C<$SIG{__DIE__}> as currently implemented
+invites grievous and difficult to track down errors. Avoid it
+and use an C<END{}> or CORE::GLOBAL::die override instead.
+
+See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and
+L<warnings> for additional information.
+
+=item $BASETIME
+
+=item $^T
+X<$^T> X<$BASETIME>
+
+The time at which the program began running, in seconds since the
+epoch (beginning of 1970). The values returned by the B<-M>, B<-A>,
+and B<-C> filetests are based on this value.
+
+=item $PERL_VERSION
+
+=item $^V
+X<$^V> X<$PERL_VERSION>
+
+The revision, version, and subversion of the Perl interpreter,
+represented as a C<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 C<$^V> was represented
+as a v-string.
+
+C<$^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
+
+To convert C<$^V> into its string representation use C<sprintf()>'s
+C<"%vd"> conversion:
+
+ printf "version is v%vd\n", $^V; # Perl's version
+
+See the documentation of C<use VERSION> and C<require VERSION>
+for a convenient way to fail if the running Perl interpreter is too old.
+
+See also C<$]> for an older representation of the Perl version.
+
+This variable was added in Perl v5.6.0.
+
+Mnemonic: use ^V for Version Control.
+
+=item ${^WIN32_SLOPPY_STAT}
+X<${^WIN32_SLOPPY_STAT}> X<sitecustomize> X<sitecustomize.pl>
+
+If this variable is set to a true value, then C<stat()> on Windows will
+not try to open the file. This means that the link count cannot be
+determined and file attributes may be out of date if additional
+hardlinks to the file exist. On the other hand, not opening the file
+is considerably faster, especially for files on network drives.
+
+This variable could be set in the F<sitecustomize.pl> file to
+configure the local Perl installation to use "sloppy" C<stat()> by
+default. See the documentation for B<-f> in
+L<perlrun|perlrun/"Command Switches"> for more information about site
+customization.
+
+This variable was added in Perl v5.10.0.
+
+=item $EXECUTABLE_NAME
+
+=item $^X
+X<$^X> X<$EXECUTABLE_NAME>
+
+The name used to execute the current copy of Perl, from C's
+C<argv[0]> or (where supported) F</proc/self/exe>.
+
+Depending on the host operating system, the value of C<$^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 C<$^X> is in PATH. For VMS, the
+value may or may not include a version number.
+
+You usually can use the value of C<$^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 C<$^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 C<$^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 C<$^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;
+ }
+
+=back
+
+=head2 Variables related to regular expressions
+
+Most of the special variables related to regular expressions are side
+effects. Perl sets these variables when it has a successful match, 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 dynamically-scoped, unless we note
+otherwise.
+
+The dynamic nature of the regular expression variables means that
+their value is limited to the block that they are in, as demonstrated
+by this bit of code:
+
+ my $outer = 'Wallace and Grommit';
+ my $inner = 'Mutt and Jeff';
+
+ my $pattern = qr/(\S+) and (\S+)/;
+
+ sub show_n { print "\$1 is $1; \$2 is $2\n" }
+
+ {
+ OUTER:
+ show_n() if $outer =~ m/$pattern/;
+
+ INNER: {
+ show_n() if $inner =~ m/$pattern/;
+ }
+
+ show_n();
+ }
+
+The output shows that while in the C<OUTER> block, the values of C<$1>
+and C<$2> are from the match against C<$outer>. Inside the C<INNER>
+block, the values of C<$1> and C<$2> are from the match against
+C<$inner>, but only until the end of the block (i.e. the dynamic
+scope). After the C<INNER> block completes, the values of C<$1> and
+C<$2> return to the values for the match against C<$outer> even though
+we have not made another match:
+
+ $1 is Wallace; $2 is Grommit
+ $1 is Mutt; $2 is Jeff
+ $1 is Wallace; $2 is Grommit
+
+If you are using Perl v5.18 or earlier, note that C<use
+English> imposes a considerable performance penalty on all regular
+expression matches in a program because it uses the C<$`>, C<$&>, and
+C<$'>, regardless of whether they occur in the scope of C<use
+English>. For that reason, saying C<use English> in libraries is
+strongly discouraged unless you import it without the match variables:
+
+ use English '-no_match_vars'
+
+The C<Devel::NYTProf> and C<Devel::FindAmpersand>
+modules can help you find uses of these
+problematic match variables in your code.
+
+Since Perl v5.10.0, you can use the C</p> match operator flag and the
+C<${^PREMATCH}>, C<${^MATCH}>, and C<${^POSTMATCH}> variables instead
+so you only suffer the performance penalties.
+
+If you are using Perl v5.20.0 or higher, you do not need to worry about
+this, as the three naughty variables are no longer naughty.
+
+=over 8
+
+=item $<I<digits>> ($1, $2, ...)
+X<$1> X<$2> X<$3>
+
+Contains the subpattern from the corresponding set of capturing
+parentheses from the last successful pattern match, not counting patterns
+matched in nested blocks that have been exited already.
+
+These variables are read-only and dynamically-scoped.
+
+Mnemonic: like \digits.
+
+=item $MATCH
+
+=item $&
+X<$&> X<$MATCH>