This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix typo in perlvar
[perl5.git] / pod / perlvar.pod
index d61fad6..1dff9ce 100644 (file)
@@ -4,120 +4,77 @@ perlvar - Perl predefined variables
 
 =head1 DESCRIPTION
 
-=head2 Predefined Names
+=head2 The Syntax of Variable Names
 
-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 B<awk>. In general, it's best to use the
-
-    use English '-no_match_vars';
-
-invocation if you don't need $PREMATCH, $MATCH, or $POSTMATCH, as it avoids
-a certain performance hit with the use of regular expressions. See
-L<English>.
-
-Variables that depend on the currently selected filehandle may be set by
-calling an appropriate object method on the IO::Handle 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;
-
-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 attribute.
-The methods each take an optional EXPR, which, if supplied, specifies the
-new value for the IO::Handle 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 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 C<$/> is now changed for any other code
-running inside the same Perl interpreter.
+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
+C<::> or C<'>. In this case, the part before the last C<::> or
+C<'> is taken to be a I<package qualifier>; see L<perlmod>.
 
-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 C<{}> block, you should create one yourself. For
-example:
+Perl variable names may also be a sequence of digits or a single
+punctuation or control character. 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. Perl has a special syntax for the single-control-character
+names: It understands C<^X> (caret C<X>) to mean the control-C<X>
+character. For example, the notation C<$^W> (dollar-sign caret
+C<W>) is the scalar variable whose name is the single character
+control-C<W>. This is better than typing a literal control-C<W>
+into your program.
 
-    my $content = '';
-    open my $fh, "<", "foo" or die $!;
-    {
-        local $/;
-        $content = <$fh>;
-    }
-    close $fh;
+Since Perl 5.6, Perl variable names may be alphanumeric
+strings that begin with control characters (or better yet, a caret).
+These variables must be written in the form C<${^Foo}>; the braces
+are not optional. C<${^Foo}> denotes the scalar variable whose
+name is a control-C<F> followed by two C<o>'s. These variables are
+reserved for future special uses by Perl, except for the ones that
+begin with C<^_> (control-underscore or caret-underscore). No
+control-character name that begins with C<^_> will acquire a special
+meaning in any future version of Perl; such names may therefore be
+used safely in programs. C<$^_> itself, however, I<is> reserved.
 
-Here is an example of how your own code can go broken:
+Perl identifiers that begin with digits, control characters, or
+punctuation characters are exempt from the effects of the C<package>
+declaration and are always forced to be in package C<main>; they are
+also exempt from C<strict 'vars'> errors. A few other names are also
+exempt in these ways:
 
-    for (1..5){
-        nasty_break();
-        print "$_ ";
-    }
-    sub nasty_break {
-        $_ = 5;
-        # do something with $_
-    }
+       ENV      STDIN
+       INC      STDOUT
+       ARGV     STDERR
+       ARGVOUT
+       SIG
 
-You probably expect this code to print:
+In particular, the special C<${^_XYZ}> variables are always taken
+to be in package C<main>, regardless of any C<package> declarations
+presently in scope.
 
-    1 2 3 4 5
+=head1 SPECIAL VARIABLES
 
-but instead you get:
+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:
 
-    5 5 5 5 5
+       use English;
 
-Why? Because nasty_break() modifies C<$_> without localizing it
-first. The fix is to add local():
+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 B<awk>. To avoid a performance hit, if you don't need the
+C<$PREMATCH>, C<$MATCH>, or C<$POSTMATCH> it's best to use the C<English>
+module without them:
 
-        local $_ = 5;
+       use English '-no_match_vars';
 
-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.
+Before you continue, note the sort order for variables. In general, we
+first list the variables in case-insensitive, almost-lexigraphical
+order (ignoring the C<{> or C<^> preceding words, as in C<${^UNICODE}>
+or C<$^T>), although C<$_> and C<@_> 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.
 
-The following list is ordered by scalar variables first, then the
-arrays, then the hashes.
+=head2 General Variables
 
 =over 8
 
@@ -126,34 +83,33 @@ arrays, then the hashes.
 =item $_
 X<$_> X<$ARG>
 
-The default input and pattern-searching space.  The following pairs are
+The default input and pattern-searching space. The following pairs are
 equivalent:
 
-    while (<>) {...}   # equivalent only in while!
-    while (defined($_ = <>)) {...}
+       while (<>) {...}    # equivalent only in while!
+       while (defined($_ = <>)) {...}
 
-    /^Subject:/
-    $_ =~ /^Subject:/
+       /^Subject:/
+       $_ =~ /^Subject:/
 
-    tr/a-z/A-Z/
-    $_ =~ tr/a-z/A-Z/
+       tr/a-z/A-Z/
+       $_ =~ tr/a-z/A-Z/
 
-    chomp
-    chomp($_)
+       chomp
+       chomp($_)
 
-Here are the places where Perl will assume $_ even if you
-don't use it:
+Here are the places where Perl will assume C<$_> even if you don't use it:
 
 =over 3
 
 =item *
 
-The following functions:
+The following functions use C<$_> as a default argument:
 
 abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, exp, glob,
 hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print,
 quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only),
-rmdir, sin, split (on its second argument), sqrt, stat, study, uc, ucfirst, 
+rmdir, sin, split (on its second argument), sqrt, stat, study, uc, ucfirst,
 unlink, unpack.
 
 =item *
@@ -161,7 +117,6 @@ unlink, unpack.
 All file tests (C<-f>, C<-d>) except for C<-t>, which defaults to STDIN.
 See L<perlfunc/-X>
 
-
 =item *
 
 The pattern matching operations C<m//>, C<s///> and C<tr///> (aka C<y///>)
@@ -174,1562 +129,1978 @@ variable is supplied.
 
 =item *
 
-The implicit iterator variable in the grep() and map() functions.
+The implicit iterator variable in the C<grep()> and C<map()> functions.
 
 =item *
 
-The implicit variable of given().
+The implicit variable of C<given()>.
 
 =item *
 
 The default place to put an input record when a C<< <FH> >>
 operation's result is tested by itself as the sole criterion of a C<while>
-test.  Outside a C<while> test, this will not happen.
+test. Outside a C<while> test, this will not happen.
 
 =back
 
 As C<$_> is a global variable, this may lead in some cases to unwanted
-side-effects.  As of perl 5.9.1, you can now use a lexical version of
-C<$_> by declaring it in a file or in a block with C<my>.  Moreover,
+side-effects. As of perl 5.9.1, you can now use a lexical version of
+C<$_> by declaring it in a file or in a block with C<my>. Moreover,
 declaring C<our $_> restores the global C<$_> in the current scope.
 
-(Mnemonic: underline is understood in certain operations.)
+Mnemonic: underline is understood in certain operations.
 
-=back
+=item @ARG
 
-=over 8
+=item @_
+X<@_> X<@ARG>
 
-=item $a
+Within a subroutine the array C<@_> contains the parameters passed to
+that subroutine. Inside a subroutine, C<@_> is the default array for
+the array operators C<push>, C<pop>, C<shift>, and C<unshift>.
 
-=item $b
-X<$a> X<$b>
+See L<perlsub>.
 
-Special package variables when using sort(), see L<perlfunc/sort>.
-Because of this specialness $a and $b don't need to be declared
-(using use vars, or 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 sort() comparison block or function.
+=item $LIST_SEPARATOR
 
-=back
+=item $"
+X<$"> X<$LIST_SEPARATOR>
 
-=over 8
+When an array or an array slice is interpolated into a double-quoted
+string or a similar context such as C</.../>, its elements are
+separated by this value. Default is a space. For example, this:
 
-=item $<I<digits>>
-X<$1> X<$2> X<$3>
+       print "The array is: @array\n";
 
-Contains the subpattern from the corresponding set of capturing
-parentheses from the last pattern match, not counting patterns
-matched in nested blocks that have been exited already.  (Mnemonic:
-like \digits.)  These variables are all read-only and dynamically
-scoped to the current BLOCK.
+is equivalent to this:
 
-=item $MATCH
+       print "The array is: " . join($", @array) . "\n";
 
-=item $&
-X<$&> X<$MATCH>
+Mnemonic: works in double-quoted context.
 
-The string matched by the last successful pattern match (not counting
-any matches hidden within a BLOCK or eval() enclosed by the current
-BLOCK).  (Mnemonic: like & in some editors.)  This variable is read-only
-and dynamically scoped to the current BLOCK.
+=item $PROCESS_ID
 
-The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches.  See L</BUGS>.
+=item $PID
 
-See L</@-> for a replacement.
+=item $$
+X<$$> X<$PID> X<$PROCESS_ID>
 
-=item ${^MATCH}
-X<${^MATCH}>
+The process number of the Perl running this script. You should
+consider this variable read-only, although it will be altered
+across C<fork()> calls.
 
-This is similar to C<$&> (C<$POSTMATCH>) except that it does not incur the
-performance penalty associated with that variable, and is only guaranteed
-to return a defined value when the pattern was compiled or executed with
-the C</p> modifier.
+Note for Linux users: on Linux, the C functions C<getpid()> and
+C<getppid()> return different values from different threads. In order to
+be portable, this behavior is not reflected by C<$$>, whose value remains
+consistent across threads. If you want to call the underlying C<getpid()>,
+you may use the CPAN module C<Linux::Pid>.
 
-=item $PREMATCH
+Mnemonic: same as shells.
 
-=item $`
-X<$`> X<$PREMATCH>
+=item $REAL_GROUP_ID
 
-The string preceding whatever was matched by the last successful
-pattern match (not counting any matches hidden within a BLOCK or eval
-enclosed by the current BLOCK).  (Mnemonic: C<`> often precedes a quoted
-string.)  This variable is read-only.
+=item $GID
 
-The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches.  See L</BUGS>.
+=item $(
+X<$(> X<$GID> X<$REAL_GROUP_ID>
 
-See L</@-> for a replacement.
+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
+C<getgid()>, and the subsequent ones by C<getgroups()>, one of which may be
+the same as the first number.
 
-=item ${^PREMATCH}
-X<${^PREMATCH}>
+However, a value assigned to C<$(> must be a single number used to
+set the real gid. So the value given by C<$(> should I<not> be assigned
+back to C<$(> without being forced numeric, such as by adding zero. Note
+that this is different to the effective gid (C<$)>) which does take a
+list.
 
-This is similar to C<$`> ($PREMATCH) except that it does not incur the
-performance penalty associated with that variable, and is only guaranteed
-to return a defined value when the pattern was compiled or executed with
-the C</p> modifier.
+You can change both the real gid and the effective gid at the same
+time by using C<POSIX::setgid()>. Changes to C<$(> require a check to C<$!>
+to detect any possible errors after an attempted change.
 
-=item $POSTMATCH
+Mnemonic: parentheses are used to I<group> things. The real gid is the
+group you I<left>, if you're running setgid.
 
-=item $'
-X<$'> X<$POSTMATCH>
+=item $EFFECTIVE_GROUP_ID
 
-The string following whatever was matched by the last successful
-pattern match (not counting any matches hidden within a BLOCK or eval()
-enclosed by the current BLOCK).  (Mnemonic: C<'> often follows a quoted
-string.)  Example:
+=item $EGID
 
-    local $_ = 'abcdefghi';
-    /def/;
-    print "$`:$&:$'\n";        # prints abc:def:ghi
+=item $)
+X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID>
 
-This variable is read-only and dynamically scoped to the current BLOCK.
+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 C<getegid()>, and the subsequent ones by C<getgroups()>,
+one of which may be the same as the first number.
 
-The use of this variable anywhere in a program imposes a considerable
-performance penalty on all regular expression matches.  See L</BUGS>.
+Similarly, a value assigned to C<$)> must also be a space-separated
+list of numbers. The first number sets the effective gid, and
+the rest (if any) are passed to C<setgroups()>. To get the effect of an
+empty list for C<setgroups()>, just repeat the new effective gid; that is,
+to force an effective gid of 5 and an effectively empty C<setgroups()>
+list, say C< $) = "5 5" >.
 
-See L</@-> for a replacement.
+You can change both the effective gid and the real gid at the same
+time by using C<POSIX::setgid()> (use only a single numeric argument).
+Changes to C<$)> require a check to C<$!> to detect any possible errors
+after an attempted change.
 
-=item ${^POSTMATCH}
-X<${^POSTMATCH}>
+C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
+machines that support the corresponding I<set[re][ug]id()> routine. C<$(>
+and C<$)> can be swapped only on machines supporting C<setregid()>.
 
-This is similar to C<$'> (C<$POSTMATCH>) except that it does not incur the
-performance penalty associated with that variable, and is only guaranteed
-to return a defined value when the pattern was compiled or executed with
-the C</p> modifier.
+Mnemonic: parentheses are used to I<group> things. The effective gid
+is the group that's I<right> for you, if you're running setgid.
 
-=item $LAST_PAREN_MATCH
+=item $PROGRAM_NAME
 
-=item $+
-X<$+> X<$LAST_PAREN_MATCH>
+=item $0
+X<$0> X<$PROGRAM_NAME>
 
-The text matched by the last bracket of the last successful search pattern.
-This is useful if you don't know which one of a set of alternative patterns
-matched. For example:
+Contains the name of the program being executed.
 
-    /Version: (.*)|Revision: (.*)/ && ($rev = $+);
+On some (but not all) operating systems assigning to C<$0> modifies
+the argument area that the C<ps> program sees. On some platforms you
+may have to use special C<ps> options or a different C<ps> to see the
+changes. Modifying the C<$0> is more useful as a way of indicating the
+current program state than it is for hiding the program you're
+running.
 
-(Mnemonic: be positive and forward looking.)
-This variable is read-only and dynamically scoped to the current BLOCK.
+Note that there are platform-specific limitations on the maximum
+length of C<$0>. In the most extreme case it may be limited to the
+space occupied by the original C<$0>.
 
-=item $LAST_SUBMATCH_RESULT
+In some platforms there may be arbitrary amount of padding, for
+example space characters, after the modified name as shown by C<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).
 
-=item $^N
-X<$^N>
+Note for BSD users: setting C<$0> does not completely remove "perl"
+from the ps(1) output. For example, setting C<$0> to C<"foobar"> may
+result in C<"perl: foobar (perl)"> (whether both the C<"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.
 
-The text matched by the used group most-recently closed (i.e. the group
-with the rightmost closing parenthesis) of the last successful search
-pattern.  (Mnemonic: the (possibly) Nested parenthesis that most
-recently closed.)
+In multithreaded scripts Perl coordinates the threads so that any
+thread may modify its copy of the C<$0> and the change becomes visible
+to ps(1) (assuming the operating system plays along). Note that
+the view of C<$0> the other threads have will not change since they
+have their own copies of it.
 
-This is primarily used inside C<(?{...})> blocks for examining text
-recently matched. For example, to effectively capture text to a variable
-(in addition to C<$1>, C<$2>, etc.), replace C<(...)> with
+If the program has been given to perl via the switches C<-e> or C<-E>,
+C<$0> will contain the string C<"-e">.
 
-     (?:(...)(?{ $var = $^N }))
+On Linux as of perl 5.14 the legacy process name will be set with
+C<prctl(2)>, in addition to altering the POSIX name via C<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 C<$0>. The string you supply will be
+cut off at 16 bytes, this is a limitation imposed by Linux.
 
-By setting and then using C<$var> in this way relieves you from having to
-worry about exactly which numbered set of parentheses they are.
+Mnemonic: same as B<sh> and B<ksh>.
 
-This variable is dynamically scoped to the current BLOCK.
+=item $SUBSCRIPT_SEPARATOR
 
-=item @LAST_MATCH_END
+=item $SUBSEP
 
-=item @+
-X<@+> X<@LAST_MATCH_END>
+=item $;
+X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>
 
-This array holds the offsets of the ends of the last successful
-submatches in the currently active dynamic scope.  C<$+[0]> is
-the offset into the string of the end of the entire match.  This
-is the same value as what the C<pos> function returns when called
-on the variable that was matched against.  The I<n>th element
-of this array holds the offset of the I<n>th submatch, so
-C<$+[1]> is the offset past where $1 ends, C<$+[2]> the offset
-past where $2 ends, and so on.  You can use C<$#+> to determine
-how many subgroups were in the last successful match.  See the
-examples given for the C<@-> variable.
+The subscript separator for multidimensional array emulation. If you
+refer to a hash element as
 
-=item %+
-X<%+>
+       $foo{$a,$b,$c}
 
-Similar to C<@+>, the C<%+> hash allows access to the named capture
-buffers, should they exist, in the last successful match in the
-currently active dynamic scope.
+it really means
 
-For example, C<$+{foo}> is equivalent to C<$1> after the following match:
+       $foo{join($;, $a, $b, $c)}
 
-  'foo' =~ /(?<foo>foo)/;
+But don't put
 
-The keys of the C<%+> hash list only the names of buffers that have
-captured (and that are thus associated to defined values).
+       @foo{$a,$b,$c}  # a slice--note the @
 
-The underlying behaviour of C<%+> is provided by the
-L<Tie::Hash::NamedCapture> module.
+which means
 
-B<Note:> C<%-> and C<%+> are tied views into a common internal hash
-associated with the last successful regular expression. Therefore mixing
-iterative access to them via C<each> may have unpredictable results.
-Likewise, if the last successful match changes, then the results may be
-surprising.
+       ($foo{$a},$foo{$b},$foo{$c})
 
-=item HANDLE->input_line_number(EXPR)
+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<$;>.
 
-=item $INPUT_LINE_NUMBER
+Consider using "real" multidimensional arrays as described
+in L<perllol>.
 
-=item $NR
+Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon.
 
-=item $.
-X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X<line number>
+=item $REAL_USER_ID
 
-Current line number for the last filehandle accessed.
+=item $UID
 
-Each filehandle in Perl counts the number of lines that have been read
-from it.  (Depending on the value of C<$/>, Perl's idea of what
-constitutes a line may not match yours.)  When a line is read from a
-filehandle (via readline() or C<< <> >>), or when tell() or seek() is
-called on it, C<$.> becomes an alias to the line counter for that
-filehandle.
+=item $<
+X<< $< >> X<$UID> X<$REAL_USER_ID>
 
-You can adjust the counter by assigning to C<$.>, but this will not
-actually move the seek pointer.  I<Localizing C<$.> will not localize
-the filehandle's line count>.  Instead, it will localize perl's notion
-of which filehandle C<$.> is currently aliased to.
+The real uid of this process. You can change both the real uid and the
+effective uid at the same time by using C<POSIX::setuid()>. Since
+changes to C<< $< >> require a system call, check C<$!> after a change
+attempt to detect any possible errors.
 
-C<$.> is reset when the filehandle is closed, but B<not> when an open
-filehandle is reopened without an intervening close().  For more
-details, see L<perlop/"IE<sol>O Operators">.  Because C<< <> >> never does
-an explicit close, line numbers increase across ARGV files (but see
-examples in L<perlfunc/eof>).
+Mnemonic: it's the uid you came I<from>, if you're running setuid.
 
-You can also use C<< HANDLE->input_line_number(EXPR) >> to access the
-line counter for a given filehandle without having to worry about
-which handle you last accessed.
+=item $EFFECTIVE_USER_ID
 
-(Mnemonic: many programs use "." to mean the current line number.)
+=item $EUID
 
-=item IO::Handle->input_record_separator(EXPR)
+=item $>
+X<< $> >> X<$EUID> X<$EFFECTIVE_USER_ID>
 
-=item $INPUT_RECORD_SEPARATOR
+The effective uid of this process. For example:
 
-=item $RS
+       $< = $>;            # set real to effective uid
+       ($<,$>) = ($>,$<);  # swap real and effective uids
 
-=item $/
-X<$/> X<$RS> X<$INPUT_RECORD_SEPARATOR>
+You can change both the effective uid and the real uid at the same
+time by using C<POSIX::setuid()>. Changes to C<< $> >> require a check
+to C<$!> to detect any possible errors after an attempted change.
 
-The input record separator, newline by default.  This 
-influences Perl's idea of what a "line" is.  Works like B<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 C<undef> to read through the end
-of file.  Setting it to C<"\n\n"> means something slightly
-different than setting to C<"">, if the file contains consecutive
-empty lines.  Setting to C<""> will treat two or more consecutive
-empty lines as a single empty line.  Setting to C<"\n\n"> will
-blindly assume that the next input character belongs to the next
-paragraph, even if it's a newline.  (Mnemonic: / delimits
-line boundaries when quoting poetry.)
+C<< $< >> and C<< $> >> can be swapped only on machines
+supporting C<setreuid()>.
 
-    local $/;           # enable "slurp" mode
-    local $_ = <FH>;    # whole file now here
-    s/\n[ \t]+/ /g;
+Mnemonic: it's the uid you went I<to>, if you're running setuid.
 
-Remember: the value of C<$/> is a string, not a regex.  B<awk> has to be
-better for something. :-)
+=item $a
 
-Setting C<$/> 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.  So this:
+=item $b
+X<$a> X<$b>
 
-    local $/ = \32768; # or \"32768", or \$var_containing_32768
-    open my $fh, "<", $myfile or die $!;
-    local $_ = <$fh>;
+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.
 
-will read a record of no more than 32768 bytes from FILE.  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 will cause reading in the (rest of the) whole file.
+=item $COMPILING
 
-On VMS, record reads are done with the equivalent of C<sysread>,
-so it's best not to mix record and non-record reads on the same
-file.  (This is unlikely to be a problem, because any file you'd
-want to read in record mode is probably unusable in line mode.)
-Non-VMS systems do normal I/O, so it's safe to mix record and
-non-record reads of a file.
+=item $^C
+X<$^C> X<$COMPILING>
 
-See also L<perlport/"Newlines">.  Also see C<$.>.
+The current value of the flag associated with the B<-c> switch.
+Mainly of use with B<-MO=...> to allow code to alter its behavior
+when being compiled, such as for example to C<AUTOLOAD> at compile
+time rather than normal, deferred loading. Setting
+C<$^C = 1> is similar to calling C<B::minus_c>.
 
-=item HANDLE->autoflush(EXPR)
+This variable was added in Perl 5.6.
 
-=item $OUTPUT_AUTOFLUSH
+=item $DEBUGGING
 
-=item $|
-X<$|> X<autoflush> X<flush> X<$OUTPUT_AUTOFLUSH>
+=item $^D
+X<$^D> X<$DEBUGGING>
 
-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; C<$|> 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 B<rsh> and want to see the output as it's
-happening.  This has no effect on input buffering.  See L<perlfunc/getc>
-for that.  See L<perldoc/select> on how to select the output channel. 
-See also L<IO::Handle>. (Mnemonic: when you want your pipes to be piping hot.)
-
-=item IO::Handle->output_field_separator EXPR
+The current value of the debugging flags. May be read or set. Like its
+command-line equivalent, you can use numeric or symbolic values, eg
+C<$^D = 10> or C<$^D = "st">.
 
-=item $OUTPUT_FIELD_SEPARATOR
+Mnemonic: value of B<-D> switch.
 
-=item $OFS
+=item ${^ENCODING}
+X<${^ENCODING}>
 
-=item $,
-X<$,> X<$OFS> X<$OUTPUT_FIELD_SEPARATOR>
+The I<object reference> to the C<Encode> object that is used to convert
+the source code to Unicode. Thanks to this variable your Perl script
+does not have to be written in UTF-8. Default is I<undef>. The direct
+manipulation of this variable is highly discouraged.
 
-The output field separator for the print operator.  If defined, this
-value is printed between each of print's arguments.  Default is C<undef>.
-(Mnemonic: what is printed when there is a "," in your print statement.)
+This variable was added in Perl 5.8.2.
 
-=item IO::Handle->output_record_separator EXPR
+=item %ENV
+X<%ENV>
 
-=item $OUTPUT_RECORD_SEPARATOR
+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 $ORS
+=item $SYSTEM_FD_MAX
 
-=item $\
-X<$\> X<$ORS> X<$OUTPUT_RECORD_SEPARATOR>
+=item $^F
+X<$^F> X<$SYSTEM_FD_MAX>
 
-The output record separator for the print operator.  If defined, this
-value is printed after the last of print's arguments.  Default is C<undef>.
-(Mnemonic: you set C<$\> instead of adding "\n" at the end of the print.
-Also, it's just like C<$/>, but it's what you get "back" from Perl.)
+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 $LIST_SEPARATOR
+=item @F
+X<@F>
 
-=item $"
-X<$"> X<$LIST_SEPARATOR>
+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'>.
 
-This is like C<$,> except that it applies to array and slice values
-interpolated into a double-quoted string (or similar interpreted
-string).  Default is a space.  (Mnemonic: obvious, I think.)
+=item ${^GLOBAL_PHASE}
+X<${^GLOBAL_PHASE}>
 
-=item $SUBSCRIPT_SEPARATOR
+The current phase of the perl interpreter.
 
-=item $SUBSEP
+Possible values are:
 
-=item $;
-X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>
+=over 8
 
-The subscript separator for multidimensional array emulation.  If you
-refer to a hash element as
+=item CONSTRUCT
 
-    $foo{$a,$b,$c}
+The C<PerlInterpreter*> is being constructed via C<perl_construct>. This
+value is mostly there for completeness and for use via the
+underlying C variable C<PL_phase>. It's not really possible for Perl
+code to be executed unless construction of the interpreter is
+finished.
 
-it really means
+=item START
 
-    $foo{join($;, $a, $b, $c)}
+This is the global compile-time. That includes, basically, every
+C<BEGIN> block executed directly or indirectly from during the
+compile-time of the top-level program.
 
-But don't put
+This phase is not called "BEGIN" to avoid confusion with
+C<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
+C<eval "use SomeModule"> are not global interpreter phases, and
+therefore aren't reflected by C<${^GLOBAL_PHASE}>.
 
-    @foo{$a,$b,$c}     # a slice--note the @
+=item CHECK
 
-which means
+Execution of any C<CHECK> blocks.
 
-    ($foo{$a},$foo{$b},$foo{$c})
+=item INIT
 
-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<$;>.
-(Mnemonic: comma (the syntactic subscript separator) is a
-semi-semicolon.  Yeah, I know, it's pretty lame, but C<$,> is already
-taken for something more important.)
+Similar to "CHECK", but for C<INIT>-blocks, not C<CHECK> blocks.
 
-Consider using "real" multidimensional arrays as described
-in L<perllol>.
+=item RUN
 
-=item HANDLE->format_page_number(EXPR)
+The main run-time, i.e. the execution of C<PL_main_root>.
 
-=item $FORMAT_PAGE_NUMBER
+=item END
 
-=item $%
-X<$%> X<$FORMAT_PAGE_NUMBER>
+Execution of any C<END> blocks.
 
-The current page number of the currently selected output channel.
-Used with formats.
-(Mnemonic: % is page number in B<nroff>.)
+=item DESTRUCT
 
-=item HANDLE->format_lines_per_page(EXPR)
+Global destruction.
 
-=item $FORMAT_LINES_PER_PAGE
+=back
 
-=item $=
-X<$=> X<$FORMAT_LINES_PER_PAGE>
+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.
 
-The current page length (printable lines) of the currently selected
-output channel.  Default is 60.  
-Used with formats.
-(Mnemonic: = has horizontal lines.)
+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.
 
-=item HANDLE->format_lines_left(EXPR)
+An example of all of the phases Perl code can see:
 
-=item $FORMAT_LINES_LEFT
+    BEGIN { print "compile-time: ${^GLOBAL_PHASE}\n" }
 
-=item $-
-X<$-> X<$FORMAT_LINES_LEFT>
+    INIT  { print "init-time: ${^GLOBAL_PHASE}\n" }
 
-The number of lines left on the page of the currently selected output
-channel.  
-Used with formats.
-(Mnemonic: lines_on_page - lines_printed.)
+    CHECK { print "check-time: ${^GLOBAL_PHASE}\n" }
 
-=item @LAST_MATCH_START
+    {
+        package Print::Phase;
 
-=item @-
-X<@-> X<@LAST_MATCH_START>
+        sub new {
+            my ($class, $time) = @_;
+            return bless \$time, $class;
+        }
 
-$-[0] is the offset of the start of the last successful match.
-C<$-[>I<n>C<]> is the offset of the start of the substring matched by
-I<n>-th subpattern, or undef if the subpattern did not match.
+        sub DESTROY {
+            my $self = shift;
+            print "$$self: ${^GLOBAL_PHASE}\n";
+        }
+    }
 
-Thus after a match against $_, $& coincides with C<substr $_, $-[0],
-$+[0] - $-[0]>.  Similarly, $I<n> coincides with C<substr $_, $-[n],
-$+[n] - $-[n]> if C<$-[n]> is defined, and $+ coincides with
-C<substr $_, $-[$#-], $+[$#-] - $-[$#-]>.  One can use C<$#-> to find the last
-matched subgroup in the last successful match.  Contrast with
-C<$#+>, the number of subgroups in the regular expression.  Compare
-with C<@+>.
+    print "run-time: ${^GLOBAL_PHASE}\n";
 
-This array holds the offsets of the beginnings of the last
-successful submatches in the currently active dynamic scope.
-C<$-[0]> is the offset into the string of the beginning of the
-entire match.  The I<n>th element of this array holds the offset
-of the I<n>th submatch, so C<$-[1]> is the offset where $1
-begins, C<$-[2]> the offset where $2 begins, and so on.
+    my $runtime = Print::Phase->new(
+        "lexical variables are garbage collected before END"
+    );
 
-After a match against some variable $var:
+    END   { print "end-time: ${^GLOBAL_PHASE}\n" }
 
-=over 5
+    our $destruct = Print::Phase->new(
+        "package variables are garbage collected after END"
+    );
 
-=item C<$`> is the same as C<substr($var, 0, $-[0])>
+This will print out
 
-=item C<$&> is the same as C<substr($var, $-[0], $+[0] - $-[0])>
+    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
 
-=item C<$'> is the same as C<substr($var, $+[0])>
+This variable was added in Perl 5.14.0.
 
-=item C<$1> is the same as C<substr($var, $-[1], $+[1] - $-[1])>  
+=item $^H
+X<$^H>
 
-=item C<$2> is the same as C<substr($var, $-[2], $+[2] - $-[2])>
+WARNING: This variable is strictly for internal use only. Its availability,
+behavior, and contents are subject to change without notice.
 
-=item C<$3> is the same as C<substr($var, $-[3], $+[3] - $-[3])>
+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.
 
-=back
+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 C<$^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 C<$^H>.
 
-=item %-
-X<%->
+This behavior provides the semantic of lexical scoping, and is used in,
+for instance, the C<use strict> pragma.
 
-Similar to C<%+>, this variable allows access to the named capture buffers
-in the last successful match in the currently active dynamic scope. To
-each capture buffer 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.
+The contents should be an integer; different bits of it are used for
+different pragmatic flags. Here's an example:
 
-Here's an example:
+       sub add_100 { $^H |= 0x100 }
 
-    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";
-            }
-        }
-    }
+       sub foo {
+               BEGIN { add_100() }
+               bar->baz($boon);
+       }
 
-would print out:
+Consider what happens during execution of the BEGIN block. At this point
+the BEGIN block has already been compiled, but the body of C<foo()> is still
+being compiled. The new value of C<$^H> will therefore be visible only while
+the body of C<foo()> is being compiled.
 
-    $-{A}[0] : '1'
-    $-{A}[1] : '3'
-    $-{B}[0] : '2'
-    $-{B}[1] : '4'
+Substitution of C<BEGIN { add_100() }> block with:
 
-The keys of the C<%-> hash correspond to all buffer names found in
-the regular expression.
+       BEGIN { require strict; strict->import('vars') }
 
-The behaviour of C<%-> is implemented via the
-L<Tie::Hash::NamedCapture> module.
+demonstrates how C<use strict 'vars'> is implemented. Here's a conditional
+version of the same lexical pragma:
 
-B<Note:> C<%-> and C<%+> are tied views into a common internal hash
-associated with the last successful regular expression. Therefore mixing
-iterative access to them via C<each> may have unpredictable results.
-Likewise, if the last successful match changes, then the results may be
-surprising.
+       BEGIN { require strict; strict->import('vars') if $condition }
 
-=item HANDLE->format_name(EXPR)
+This variable was added in Perl 5.003.
 
-=item $FORMAT_NAME
+=item %^H
+X<%^H>
 
-=item $~
-X<$~> X<$FORMAT_NAME>
+The C<%^H> hash provides the same scoping semantic as C<$^H>. This makes it
+useful for implementation of lexically scoped pragmas. See L<perlpragma>.
 
-The name of the current report format for the currently selected output
-channel.  Default is the name of the filehandle.  (Mnemonic: brother to
-C<$^>.)
+This variable was added in Perl 5.6.
 
-=item HANDLE->format_top_name(EXPR)
+=item @INC
+X<@INC>
 
-=item $FORMAT_TOP_NAME
+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:
 
-=item $^
-X<$^> X<$FORMAT_TOP_NAME>
+       use lib '/mypath/libdir/';
+       use SomeMod;
 
-The name of the current top-of-page format for the currently selected
-output channel.  Default is the name of the filehandle with _TOP
-appended.  (Mnemonic: points to top of page.)
+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 IO::Handle->format_line_break_characters EXPR
+=item %INC
+X<%INC>
 
-=item $FORMAT_LINE_BREAK_CHARACTERS
+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.
 
-=item $:
-X<$:> X<FORMAT_LINE_BREAK_CHARACTERS>
+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.
 
-The current set of characters after which a string may be broken to
-fill continuation fields (starting with ^) in a format.  Default is
-S<" \n-">, to break on whitespace or hyphens.  (Mnemonic: a "colon" in
-poetry is a part of a line.)
+=item $INPLACE_EDIT
 
-=item IO::Handle->format_formfeed EXPR
+=item $^I
+X<$^I> X<$INPLACE_EDIT>
 
-=item $FORMAT_FORMFEED
+The current value of the inplace-edit extension. Use C<undef> to disable
+inplace editing.
 
-=item $^L
-X<$^L> X<$FORMAT_FORMFEED>
+Mnemonic: value of B<-i> switch.
 
-What formats output as a form feed.  Default is \f.
+=item $^M
+X<$^M>
 
-=item $ACCUMULATOR
+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
 
-=item $^A
-X<$^A> X<$ACCUMULATOR>
+       $^M = 'a' x (1 << 16);
 
-The current value of the write() accumulator for format() lines.  A format
-contains formline() calls that put their result into C<$^A>.  After
-calling its format, write() prints out the contents of C<$^A> and empties.
-So you never really see the contents of C<$^A> unless you call
-formline() yourself and then look at it.  See L<perlform> and
-L<perlfunc/formline()>.
+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.
 
-=item $CHILD_ERROR
+This variable was added in Perl 5.004.
 
-=item $?
-X<$?> X<$CHILD_ERROR>
+=item $OSNAME
 
-The status returned by the last pipe close, backtick (C<``>) 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 (C<<< $? >> 8 >>>), and
-C<$? & 127> gives which signal, if any, the process died from, and
-C<$? & 128> reports whether there was a core dump.  (Mnemonic:
-similar to B<sh> and B<ksh>.)
+=item $^O
+X<$^O> X<$OSNAME>
 
-Additionally, if the C<h_errno> variable is supported in C, its value
-is returned via $? if any C<gethost*()> function fails.
+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>.
 
-If you have installed a signal handler for C<SIGCHLD>, the
-value of C<$?> will usually be wrong outside that handler.
+The value is identical to C<$Config{'osname'}>. See also L<Config>
+and the B<-V> command-line switch documented in L<perlrun>.
 
-Inside an C<END> subroutine C<$?> contains the value that is going to be
-given to C<exit()>.  You can modify C<$?> in an C<END> subroutine to
-change the exit status of your program.  For example:
+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.
 
-    END {
-       $? = 1 if $? == 255;  # die would make it 255
-    } 
+This variable was added in Perl 5.003.
 
-Under VMS, the pragma C<use vmsish 'status'> makes C<$?> reflect the
-actual VMS exit status, instead of the default emulation of POSIX
-status; see L<perlvms/$?> for details.
+=item ${^OPEN}
+X<${^OPEN}>
 
-Also see L<Error Indicators>.
+An internal variable used by PerlIO. A string in two parts, separated
+by a C<\0> byte, the first part describes the input layers, the second
+part describes the output layers.
 
-=item ${^CHILD_ERROR_NATIVE}
-X<$^CHILD_ERROR_NATIVE>
+This variable was added in Perl 5.8.2.
 
-The native status returned by the last pipe close, backtick (C<``>)
-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, WSTOPSIG
-and WIFCONTINUED functions provided by the L<POSIX> module.
+=item $PERLDB
 
-Under VMS this reflects the actual VMS exit status; i.e. it is the same
-as $? when the pragma C<use vmsish 'status'> is in effect.
+=item $^P
+X<$^P> X<$PERLDB>
 
-=item ${^ENCODING}
-X<$^ENCODING>
+The internal variable for debugging support. The meanings of the
+various bits are subject to change, but currently indicate:
 
-The I<object reference> to the Encode object that is used to convert
-the source code to Unicode.  Thanks to this variable your perl script
-does not have to be written in UTF-8.  Default is I<undef>.  The direct
-manipulation of this variable is highly discouraged.
+=over 6
 
-=item $OS_ERROR
+=item 0x01
 
-=item $ERRNO
+Debug subroutine enter/exit.
 
-=item $!
-X<$!> X<$ERRNO> X<$OS_ERROR>
+=item 0x02
 
-If used numerically, yields the current value of the C C<errno>
-variable, or in other words, if a system or library call fails, it
-sets this variable.  This means that the value of C<$!> is meaningful
-only I<immediately> after a B<failure>:
+Line-by-line debugging. Causes C<DB::DB()> subroutine to be called for each
+statement executed. Also causes saving source code lines (like 0x400).
 
-    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,
-    # here $! is meaningless.
+=item 0x04
 
-In the above I<meaningless> stands for anything: zero, non-zero,
-C<undef>.  A successful system or library call does B<not> set
-the variable to zero.
+Switch off optimizations.
 
-If used as a string, yields the corresponding system error string.
-You can assign a number to C<$!> to set I<errno> if, for instance,
-you want C<"$!"> to return the string for error I<n>, or you want
-to set the exit value for the die() operator.  (Mnemonic: What just
-went bang?)
+=item 0x08
 
-Also see L<Error Indicators>.
+Preserve more data for future interactive inspections.
 
-=item %OS_ERROR
+=item 0x10
 
-=item %ERRNO
+Keep info about source lines on which a subroutine is defined.
 
-=item %!
-X<%!>
+=item 0x20
 
-Each element of C<%!> has a true value only if C<$!> is set to that
-value.  For example, C<$!{ENOENT}> is true if and only if the current
-value of C<$!> is C<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).
-To check if a particular key is meaningful on your system, use
-C<exists $!{the_key}>; for a list of legal keys, use C<keys %!>.
-See L<Errno> for more information, and also see above for the
-validity of C<$!>.
+Start with single-step on.
 
-=item $EXTENDED_OS_ERROR
+=item 0x40
 
-=item $^E
-X<$^E> X<$EXTENDED_OS_ERROR>
+Use subroutine address instead of name when reporting.
 
-Error information specific to the current operating system.  At
-the moment, this differs from C<$!> under only VMS, OS/2, and Win32
-(and for MacPerl).  On all other platforms, C<$^E> is always just
-the same as C<$!>.
+=item 0x80
 
-Under VMS, C<$^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 C<$!>.  This is particularly
-important when C<$!> is set to B<EVMSERR>.
+Report C<goto &subroutine> as well.
 
-Under OS/2, C<$^E> is set to the error code of the last call to
-OS/2 API either via CRT, or directly from perl.
+=item 0x100
 
-Under Win32, C<$^E> always returns the last error information
-reported by the Win32 call C<GetLastError()> which describes
-the last error from within the Win32 API.  Most Win32-specific
-code will report errors via C<$^E>.  ANSI C and Unix-like calls
-set C<errno> and so most portable Perl code will report errors
-via C<$!>. 
+Provide informative "file" names for evals based on the place they were compiled.
 
-Caveats mentioned in the description of C<$!> generally apply to
-C<$^E>, also.  (Mnemonic: Extra error explanation.)
+=item 0x200
 
-Also see L<Error Indicators>.
+Provide informative names to anonymous subroutines based on the place they
+were compiled.
 
-=item $EVAL_ERROR
+=item 0x400
 
-=item $@
-X<$@> X<$EVAL_ERROR>
+Save source code lines into C<@{"_<$filename"}>.
 
-The Perl syntax error message from the last eval() operator.
-If $@ is the null string, the last eval() parsed and executed
-correctly (although the operations you invoked may have failed in the
-normal fashion).  (Mnemonic: Where was the syntax error "at"?)
+=back
 
-Warning messages are not collected in this variable.  You can,
-however, set up a routine to process warnings by setting C<$SIG{__WARN__}>
-as described below.
+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 L<perldebguts>.
 
-Also see L<Error Indicators>.
+=item %SIG
+X<%SIG>
 
-=item $PROCESS_ID
+The hash C<%SIG> contains signal handlers for signals. For example:
 
-=item $PID
+       sub handler {   # 1st argument is signal name
+               my($sig) = @_;
+               print "Caught a SIG$sig--shutting down\n";
+               close(LOG);
+               exit(0);
+               }
 
-=item $$
-X<$$> X<$PID> X<$PROCESS_ID>
+       $SIG{'INT'}  = \&handler;
+       $SIG{'QUIT'} = \&handler;
+       ...
+       $SIG{'INT'}  = 'DEFAULT';   # restore default action
+       $SIG{'QUIT'} = 'IGNORE';    # ignore SIGQUIT
 
-The process number of the Perl running this script.  You should
-consider this variable read-only, although it will be altered
-across fork() calls.  (Mnemonic: same as shells.)
+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.
 
-Note for Linux users: on Linux, the C functions C<getpid()> and
-C<getppid()> return different values from different threads. In order to
-be portable, this behavior is not reflected by C<$$>, whose value remains
-consistent across threads. If you want to call the underlying C<getpid()>,
-you may use the CPAN module C<Linux::Pid>.
+Here are some other examples:
 
-=item $REAL_USER_ID
+       $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??
 
-=item $UID
+Be sure not to use a bareword as the name of a signal handler,
+lest you inadvertently call it.
 
-=item $<
-X<< $< >> X<$UID> X<$REAL_USER_ID>
+If your system has the C<sigaction()> function then signal handlers
+are installed using it. This means you get reliable signal handling.
 
-The real uid of this process.  (Mnemonic: it's the uid you came I<from>,
-if you're running setuid.)  You can change both the real uid and
-the effective uid at the same time by using POSIX::setuid().  Since
-changes to $< require a system call, check $! after a change attempt to 
-detect any possible errors.
+The default delivery policy of signals changed in Perl 5.8.0 from
+immediate (also known as "unsafe") to deferred, also known as "safe
+signals". See L<perlipc> for more information.
 
-=item $EFFECTIVE_USER_ID
+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:
 
-=item $EUID
+       local $SIG{__WARN__} = sub { die $_[0] };
+       eval $proggie;
 
-=item $>
-X<< $> >> X<$EUID> X<$EFFECTIVE_USER_ID>
+As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can
+disable warnings using the empty subroutine:
 
-The effective uid of this process.  Example:
+       local $SIG{__WARN__} = sub {};
 
-    $< = $>;           # set real to effective uid
-    ($<,$>) = ($>,$<); # swap real and effective uid
+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>, 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__>.
 
-You can change both the effective uid and the real uid at the same
-time by using POSIX::setuid().  Changes to $> require a check to $!
-to detect any possible errors after an attempted change. 
+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...
+          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.
 
-(Mnemonic: it's the uid you went I<to>, if you're running setuid.)
-C<< $< >> and C<< $> >> can be swapped only on machines
-supporting setreuid().
+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.
 
-=item $REAL_GROUP_ID
+See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and
+L<warnings> for additional information.
 
-=item $GID
+=item $BASETIME
 
-=item $(
-X<$(> X<$GID> X<$REAL_GROUP_ID>
+=item $^T
+X<$^T> X<$BASETIME>
 
-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.
+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.
 
-However, a value assigned to C<$(> must be a single number used to
-set the real gid.  So the value given by C<$(> should I<not> be assigned
-back to C<$(> without being forced numeric, such as by adding zero. Note
-that this is different to the effective gid (C<$)>) which does take a
-list.
+=item ${^TAINT}
+X<${^TAINT}>
 
-You can change both the real gid and the effective gid at the same
-time by using POSIX::setgid().  Changes to $( require a check to $!
-to detect any possible errors after an attempted change.
+Reflects if taint mode is on or off. 1 for on (the program was run with
+B<-T>), 0 for off, -1 when only taint warnings are enabled (i.e. with
+B<-t> or B<-TU>).
 
-(Mnemonic: parentheses are used to I<group> things.  The real gid is the
-group you I<left>, if you're running setgid.)
+This variable is read-only.
 
-=item $EFFECTIVE_GROUP_ID
+This variable was added in Perl 5.8.
 
-=item $EGID
+=item ${^UNICODE}
+X<${^UNICODE}>
 
-=item $)
-X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID>
+Reflects certain Unicode settings of Perl. See L<perlrun>
+documentation for the C<-C> switch for more information about
+the possible values.
 
-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.
+This variable is set during Perl startup and is thereafter read-only.
 
-Similarly, a value assigned to C<$)> 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 C< $) = "5 5" >.
+This variable was added in Perl 5.8.2.
 
-You can change both the effective gid and the real gid at the same
-time by using POSIX::setgid() (use only a single numeric argument).
-Changes to $) require a check to $! to detect any possible errors
-after an attempted change.
+=item ${^UTF8CACHE}
+X<${^UTF8CACHE}>
 
-(Mnemonic: parentheses are used to I<group> things.  The effective gid
-is the group that's I<right> for you, if you're running setgid.)
+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.
 
-C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on
-machines that support the corresponding I<set[re][ug]id()> routine.  C<$(>
-and C<$)> can be swapped only on machines supporting setregid().
+This variable was added in Perl 5.8.9.
 
-=item $PROGRAM_NAME
+=item ${^UTF8LOCALE}
+X<${^UTF8LOCALE}>
 
-=item $0
-X<$0> X<$PROGRAM_NAME>
+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 C<-CL> command-line
+switch); see L<perlrun> for more info on this.
 
-Contains the name of the program being executed.
+This variable was added in Perl 5.8.8.
 
-On some (read: not all) operating systems assigning to C<$0> modifies
-the argument area that the C<ps> program sees.  On some platforms you
-may have to use special C<ps> options or a different C<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.  (Mnemonic: same as B<sh> and B<ksh>.)
+=item $PERL_VERSION
 
-Note that there are platform specific limitations on the maximum
-length of C<$0>.  In the most extreme case it may be limited to the
-space occupied by the original C<$0>.
+=item $^V
+X<$^V> X<$PERL_VERSION>
 
-In some platforms there may be arbitrary amount of padding, for
-example space characters, after the modified name as shown by C<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).
+The revision, version, and subversion of the Perl interpreter,
+represented as a C<version> object.
 
-Note for BSD users: setting C<$0> does not completely remove "perl"
-from the ps(1) output.  For example, setting C<$0> to C<"foobar"> may
-result in C<"perl: foobar (perl)"> (whether both the C<"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.
+This variable first appeared in perl 5.6.0; earlier versions of perl
+will see an undefined value. Before perl 5.10.0 C<$^V> was represented
+as a v-string.
 
-In multithreaded scripts Perl coordinates the threads so that any
-thread may modify its copy of the C<$0> and the change becomes visible
-to ps(1) (assuming the operating system plays along).  Note that
-the view of C<$0> the other threads have will not change since they
-have their own copies of it.
+C<$^V> can be used to determine whether the Perl interpreter executing
+a script is in the right range of versions. For example:
 
-If the program has been given to perl via the switches C<-e> or C<-E>,
-C<$0> will contain the string C<"-e">.
+       warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1
 
-=item $[
-X<$[>
+To convert C<$^V> into its string representation use C<sprintf()>'s
+C<"%vd"> conversion:
 
-The index of the first element in an array, and of the first character
-in a substring.  Default is 0, but you could theoretically set it
-to 1 to make Perl behave more like B<awk> (or Fortran) when
-subscripting and when evaluating the index() and substr() functions.
-(Mnemonic: [ begins subscripts.)
+       printf "version is v%vd\n", $^V;  # Perl's version
 
-As of release 5 of Perl, assignment to C<$[> 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.
+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.
 
-Note that, unlike other compile-time directives (such as L<strict>),
-assignment to C<$[> can be seen from outer lexical scopes in the same file.
-However, you can use local() on it to strictly bind its value to a
-lexical block.
+See also C<$]> for an older representation of the Perl version.
 
-=item $]
-X<$]>
+This variable was added in Perl 5.6.
 
-The version + patchlevel / 1000 of the Perl interpreter.  This variable
-can be used to determine whether the Perl interpreter executing a
-script is in the right range of versions.  (Mnemonic: Is this version
-of perl in the right bracket?)  Example:
+Mnemonic: use ^V for Version Control.
 
-    warn "No checksumming!\n" if $] < 3.019;
+=item ${^WIN32_SLOPPY_STAT}
+X<${^WIN32_SLOPPY_STAT}> X<sitecustomize> X<sitecustomize.pl>
 
-See also the documentation of C<use VERSION> and C<require VERSION>
-for a convenient way to fail if the running Perl interpreter is too old.
+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.
 
-The floating point representation can sometimes lead to inaccurate
-numeric comparisons.  See C<$^V> for a more modern representation of
-the Perl version that allows accurate string comparisons.
+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.
 
-=item $COMPILING
+This variable was added in Perl 5.10.
 
-=item $^C
-X<$^C> X<$COMPILING>
+=item $EXECUTABLE_NAME
 
-The current value of the flag associated with the B<-c> switch.
-Mainly of use with B<-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<$^C = 1> is similar to calling C<B::minus_c>.
+=item $^X
+X<$^X> X<$EXECUTABLE_NAME>
 
-=item $DEBUGGING
+The name used to execute the current copy of Perl, from C's
+C<argv[0]> or (where supported) F</proc/self/exe>.
 
-=item $^D
-X<$^D> X<$DEBUGGING>
+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.
 
-The current value of the debugging flags.  (Mnemonic: value of B<-D>
-switch.) May be read or set. Like its command-line equivalent, you can use
-numeric or symbolic values, eg C<$^D = 10> or C<$^D = "st">.
+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.,
 
-=item ${^RE_DEBUG_FLAGS}
+       @first_run = `$^X -le "print int rand 100 for 1..100"`;
 
-The current value of the regex debugging flags. Set to 0 for no debug output
-even when the re 'debug' module is loaded. See L<re> for details.
+But recall that not all operating systems support forking or
+capturing of the output of commands, so this complex statement
+may not be portable.
 
-=item ${^RE_TRIE_MAXBUF}
+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:
 
-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.
+       # 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;
+               }
 
-=item $SYSTEM_FD_MAX
+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.
 
-=item $^F
-X<$^F> X<$SYSTEM_FD_MAX>
+       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;
+               }
 
-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
-C<$^F> when the corresponding file, pipe, or socket was opened, not the
-time of the exec().
+=back
 
-=item $^H
+=head2 Variables related to regular expressions
 
-WARNING: This variable is strictly for internal use only.  Its availability,
-behavior, and contents are subject to change without notice.
+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:
 
-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.
+       if( /P(A)TT(ER)N/ ) {
+               print "I found $1 and $2\n";
+               }
 
-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.
+These variables are read-only and dynamically-scoped, unless we note
+otherwise.
 
-This behavior provides the semantic of lexical scoping, and is used in,
-for instance, the C<use strict> pragma.
+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:
 
-The contents should be an integer; different bits of it are used for
-different pragmatic flags.  Here's an example:
+       my $outer = 'Wallace and Grommit';
+       my $inner = 'Mutt and Jeff';
 
-    sub add_100 { $^H |= 0x100 }
+       my $pattern = qr/(\S+) and (\S+)/;
 
-    sub foo {
-       BEGIN { add_100() }
-       bar->baz($boon);
-    }
+       sub show_n { print "\$1 is $1; \$2 is $2\n" }
 
-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.
+       {
+       OUTER:
+               show_n() if $outer =~ m/$pattern/;
 
-Substitution of the above BEGIN block with:
+               INNER: {
+                       show_n() if $inner =~ m/$pattern/;
+                       }
 
-    BEGIN { require strict; strict->import('vars') }
+               show_n();
+       }
 
-demonstrates how C<use strict 'vars'> is implemented.  Here's a conditional
-version of the same lexical pragma:
+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:
 
-    BEGIN { require strict; strict->import('vars') if $condition }
+       $1 is Wallace; $2 is Grommit
+       $1 is Mutt; $2 is Jeff
+       $1 is Wallace; $2 is Grommit
 
-=item %^H
+Due to an unfortunate accident of Perl's implementation, 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:
 
-The %^H hash provides the same scoping semantic as $^H.  This makes it
-useful for implementation of lexically scoped pragmas. See L<perlpragma>.
+       use English '-no_match_vars'
 
-=item $INPLACE_EDIT
+The C<Devel::NYTProf> module can help you find uses of these
+problematic match variables in your code.
 
-=item $^I
-X<$^I> X<$INPLACE_EDIT>
+Since Perl 5.10, 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.
 
-The current value of the inplace-edit extension.  Use C<undef> to disable
-inplace editing.  (Mnemonic: value of B<-i> switch.)
+=over 8
 
-=item $^M
-X<$^M>
+=item $<I<digits>> ($1, $2, ...)
+X<$1> X<$2> X<$3>
 
-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 die()ing.  Suppose that your Perl
-were compiled with C<-DPERL_EMERGENCY_SBRK> and used Perl's malloc.
-Then
+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.
 
-    $^M = 'a' x (1 << 16);
+These variables are read-only and dynamically-scoped.
 
-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.
+Mnemonic: like \digits.
 
-=item $OSNAME
+=item $MATCH
 
-=item $^O
-X<$^O> X<$OSNAME>
+=item $&
+X<$&> X<$MATCH>
 
-The name of the operating system under which this copy of Perl was
-built, as determined during the configuration process.  The value
-is identical to C<$Config{'osname'}>.  See also L<Config> and the 
-B<-V> command-line switch documented in L<perlrun>.
+The string matched by the last successful pattern match (not counting
+any matches hidden within a BLOCK or C<eval()> enclosed by the current
+BLOCK).
 
-In Windows platforms, $^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 Win32::GetOSName() or
-Win32::GetOSVersion() (see L<Win32> and L<perlport>) to distinguish
-between the variants.
+The use of this variable anywhere in a program imposes a considerable
+performance penalty on all regular expression matches. To avoid this
+penalty, you can extract the same substring by using L</@->. Starting
+with Perl 5.10, you can use the </p> match flag and the C<${^MATCH}>
+variable to do the same thing for particular match operations.
 
-=item ${^OPEN}
+This variable is read-only and dynamically-scoped.
 
-An internal variable used by PerlIO.  A string in two parts, separated
-by a C<\0> byte, the first part describes the input layers, the second
-part describes the output layers.
+Mnemonic: like C<&> in some editors.
 
-=item $PERLDB
+=item ${^MATCH}
+X<${^MATCH}>
 
-=item $^P
-X<$^P> X<$PERLDB>
+This is similar to C<$&> (C<$MATCH>) except that it does not incur the
+performance penalty associated with that variable, and is only guaranteed
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
 
-The internal variable for debugging support.  The meanings of the
-various bits are subject to change, but currently indicate:
+This variable was added in Perl 5.10.
 
-=over 6
+This variable is read-only and dynamically-scoped.
 
-=item 0x01
+=item $PREMATCH
 
-Debug subroutine enter/exit.
+=item $`
+X<$`> X<$PREMATCH> X<${^PREMATCH}>
 
-=item 0x02
+The string preceding whatever was matched by the last successful
+pattern match, not counting any matches hidden within a BLOCK or C<eval>
+enclosed by the current BLOCK.
 
-Line-by-line debugging. Causes DB::DB() subroutine to be called for each
-statement executed. Also causes saving source code lines (like 0x400).
+The use of this variable anywhere in a program imposes a considerable
+performance penalty on all regular expression matches. To avoid this
+penalty, you can extract the same substring by using L</@->. Starting
+with Perl 5.10, you can use the </p> match flag and the
+C<${^PREMATCH}> variable to do the same thing for particular match
+operations.
 
-=item 0x04
+This variable is read-only and dynamically-scoped.
 
-Switch off optimizations.
+Mnemonic: C<`> often precedes a quoted string.
 
-=item 0x08
+=item ${^PREMATCH}
+X<$`> X<${^PREMATCH}>
 
-Preserve more data for future interactive inspections.
+This is similar to C<$`> ($PREMATCH) except that it does not incur the
+performance penalty associated with that variable, and is only guaranteed
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
 
-=item 0x10
+This variable was added in Perl 5.10
 
-Keep info about source lines on which a subroutine is defined.
+This variable is read-only and dynamically-scoped.
 
-=item 0x20
+=item $POSTMATCH
 
-Start with single-step on.
+=item $'
+X<$'> X<$POSTMATCH> X<${^POSTMATCH}> X<@->
 
-=item 0x40
+The string following whatever was matched by the last successful
+pattern match (not counting any matches hidden within a BLOCK or C<eval()>
+enclosed by the current BLOCK). Example:
 
-Use subroutine address instead of name when reporting.
+       local $_ = 'abcdefghi';
+       /def/;
+       print "$`:$&:$'\n";     # prints abc:def:ghi
 
-=item 0x80
+The use of this variable anywhere in a program imposes a considerable
+performance penalty on all regular expression matches.
+To avoid this penalty, you can extract the same substring by
+using L</@->. Starting with Perl 5.10, you can use the </p> match flag
+and the C<${^POSTMATCH}> variable to do the same thing for particular
+match operations.
+
+This variable is read-only and dynamically-scoped.
+
+Mnemonic: C<'> often follows a quoted string.
+
+=item ${^POSTMATCH}
+X<${^POSTMATCH}> X<$'> X<$POSTMATCH>
+
+This is similar to C<$'> (C<$POSTMATCH>) except that it does not incur the
+performance penalty associated with that variable, and is only guaranteed
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
+
+This variable was added in Perl 5.10.
+
+This variable is read-only and dynamically-scoped.
+
+=item $LAST_PAREN_MATCH
+
+=item $+
+X<$+> X<$LAST_PAREN_MATCH>
+
+The text matched by the last bracket of the last successful search pattern.
+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 dynamically-scoped.
+
+Mnemonic: be positive and forward looking.
+
+=item $LAST_SUBMATCH_RESULT
+
+=item $^N
+X<$^N> X<$LAST_SUBMATCH_RESULT>
+
+The text matched by the used group most-recently closed (i.e. the group
+with the rightmost closing parenthesis) of the last successful search
+pattern.
+
+This is primarily used inside C<(?{...})> blocks for examining text
+recently matched. For example, to effectively capture text to a variable
+(in addition to C<$1>, C<$2>, etc.), replace C<(...)> with
+
+       (?:(...)(?{ $var = $^N }))
+
+By setting and then using C<$var> in this way relieves you from having to
+worry about exactly which numbered set of parentheses they are.
+
+This variable was added in Perl 5.8.
+
+Mnemonic: the (possibly) Nested parenthesis that most recently closed.
+
+=item @LAST_MATCH_END
+
+=item @+
+X<@+> X<@LAST_MATCH_END>
+
+This array holds the offsets of the ends of the last successful
+submatches in the currently active dynamic scope. C<$+[0]> is
+the offset into the string of the end of the entire match. This
+is the same value as what the C<pos> function returns when called
+on the variable that was matched against. The I<n>th element
+of this array holds the offset of the I<n>th submatch, so
+C<$+[1]> is the offset past where C<$1> ends, C<$+[2]> the offset
+past where C<$2> ends, and so on. You can use C<$#+> to determine
+how many subgroups were in the last successful match. See the
+examples given for the C<@-> variable.
+
+This variable was added in Perl 5.6.
+
+=item %LAST_PAREN_MATCH
+
+=item %+
+X<%+> X<%LAST_PAREN_MATCH>
+
+Similar to C<@+>, the C<%+> hash allows access to the named capture
+buffers, should they exist, in the last successful match in the
+currently active dynamic scope.
+
+For example, C<$+{foo}> is equivalent to C<$1> after the following match:
+
+       'foo' =~ /(?<foo>foo)/;
+
+The keys of the C<%+> hash list only the names of buffers that have
+captured (and that are thus associated to defined values).
+
+The underlying behaviour of C<%+> is provided by the
+L<Tie::Hash::NamedCapture> module.
+
+B<Note:> C<%-> and C<%+> are tied views into a common internal hash
+associated with the last successful regular expression. Therefore mixing
+iterative access to them via C<each> may have unpredictable results.
+Likewise, if the last successful match changes, then the results may be
+surprising.
+
+This variable was added in Perl 5.10.
+
+This variable is read-only and dynamically-scoped.
+
+=item @LAST_MATCH_START
+
+=item @-
+X<@-> X<@LAST_MATCH_START>
+
+C<$-[0]> is the offset of the start of the last successful match.
+C<$-[>I<n>C<]> is the offset of the start of the substring matched by
+I<n>-th subpattern, or undef if the subpattern did not match.
+
+Thus, after a match against C<$_>, C<$&> coincides with C<substr $_, $-[0],
+$+[0] - $-[0]>. Similarly, $I<n> coincides with C<substr $_, $-[n],
+$+[n] - $-[n]> if C<$-[n]> is defined, and $+ coincides with
+C<substr $_, $-[$#-], $+[$#-] - $-[$#-]>. One can use C<$#-> to find the last
+matched subgroup in the last successful match. Contrast with
+C<$#+>, the number of subgroups in the regular expression. Compare
+with C<@+>.
+
+This array holds the offsets of the beginnings of the last
+successful submatches in the currently active dynamic scope.
+C<$-[0]> is the offset into the string of the beginning of the
+entire match. The I<n>th element of this array holds the offset
+of the I<n>th submatch, so C<$-[1]> is the offset where C<$1>
+begins, C<$-[2]> the offset where C<$2> begins, and so on.
+
+After a match against some variable C<$var>:
+
+=over 5
+
+=item C<$`> is the same as C<substr($var, 0, $-[0])>
+
+=item C<$&> is the same as C<substr($var, $-[0], $+[0] - $-[0])>
+
+=item C<$'> is the same as C<substr($var, $+[0])>
+
+=item C<$1> is the same as C<substr($var, $-[1], $+[1] - $-[1])>
+
+=item C<$2> is the same as C<substr($var, $-[2], $+[2] - $-[2])>
+
+=item C<$3> is the same as C<substr($var, $-[3], $+[3] - $-[3])>
+
+=back
+
+This variable was added in Perl 5.6.
+
+=item %LAST_MATCH_START
+
+=item %-
+X<%-> X<%LAST_MATCH_START>
+
+Similar to C<%+>, this variable allows access to the named capture groups
+in the last successful match in the currently active dynamic scope. 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 C<%-> hash correspond to all buffer names found in
+the regular expression.
+
+The behaviour of C<%-> is implemented via the
+L<Tie::Hash::NamedCapture> module.
+
+B<Note:> C<%-> and C<%+> are tied views into a common internal hash
+associated with the last successful regular expression. Therefore mixing
+iterative access to them via C<each> may have unpredictable results.
+Likewise, if the last successful match changes, then the results may be
+surprising.
+
+This variable was added in Perl 5.10
+
+This variable is read-only and dynamically-scoped.
+
+=item $LAST_REGEXP_CODE_RESULT
+
+=item $^R
+X<$^R> X<$LAST_REGEXP_CODE_RESULT>
+
+The result of evaluation of the last successful C<(?{ code })>
+regular expression assertion (see L<perlre>). May be written to.
+
+This variable was added in Perl 5.005.
+
+=item ${^RE_DEBUG_FLAGS}
+X<${^RE_DEBUG_FLAGS}>
+
+The current value of the regex debugging flags. Set to 0 for no debug output
+even when the C<re 'debug'> module is loaded. See L<re> for details.
+
+This variable was added in Perl 5.10.
+
+=item ${^RE_TRIE_MAXBUF}
+X<${^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 5.10.
+
+=back
+
+=head2 Variables related to filehandles
+
+Variables that depend on the currently selected filehandle may be set
+by calling an appropriate object method on the C<IO::Handle> 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;
+
+after which you may use either
+
+       method HANDLE EXPR
+
+or more safely,
+
+       HANDLE->method(EXPR)
+
+Each method returns the old value of the C<IO::Handle> attribute. The
+methods each take an optional EXPR, which, if supplied, specifies the
+new value for the C<IO::Handle> attribute in question. If not
+supplied, most methods do nothing to the current value--except for
+C<autoflush()>, which will assume a 1 for you, just to be different.
+
+Because loading in the C<IO::Handle> 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 C<$/> 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 C<{}> 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 C<nasty_break()> modifies C<$\> without localizing it
+first. The value you set in  C<nasty_break()> is still there when you
+return. The fix is to add C<local()> so the value doesn't leak out of
+C<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.
+
+=over 8
+
+=item $ARGV
+X<$ARGV>
+
+Contains the name of the current file when reading from C<< <> >>.
+
+=item @ARGV
+X<@ARGV>
+
+The array C<@ARGV> contains the command-line arguments intended for
+the script. C<$#ARGV> is generally the number of arguments minus
+one, because C<$ARGV[0]> is the first argument, I<not> the program's
+command name itself. See C<$0> for the command name.
+
+=item ARGV
+X<ARGV>
+
+The special filehandle that iterates over command-line filenames in
+C<@ARGV>. Usually written as the null filehandle in the angle operator
+C<< <> >>. Note that currently C<ARGV> only has its magical effect
+within the C<< <> >> operator; elsewhere it is just a plain filehandle
+corresponding to the last file opened by C<< <> >>. In particular,
+passing C<\*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 C<@ARGV>.
+
+=item ARGVOUT
+X<ARGVOUT>
+
+The special filehandle that points to the currently open output file
+when doing edit-in-place processing with B<-i>. Useful when you have
+to do a lot of inserting and don't want to keep modifying C<$_>. See
+L<perlrun> for the B<-i> switch.
+
+=item Handle->output_field_separator( EXPR )
+
+=item $OUTPUT_FIELD_SEPARATOR
+
+=item $OFS
+
+=item $,
+X<$,> X<$OFS> X<$OUTPUT_FIELD_SEPARATOR>
+
+The output field separator for the print operator. If defined, this
+value is printed between each of print's arguments. Default is C<undef>.
+
+Mnemonic: what is printed when there is a "," in your print statement.
+
+=item HANDLE->input_line_number( EXPR )
+
+=item $INPUT_LINE_NUMBER
+
+=item $NR
+
+=item $.
+X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X<line number>
+
+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 C<$/>, Perl's idea of what
+constitutes a line may not match yours.)  When a line is read from a
+filehandle (via C<readline()> or C<< <> >>), or when C<tell()> or
+C<seek()> is called on it, C<$.> becomes an alias to the line counter
+for that filehandle.
+
+You can adjust the counter by assigning to C<$.>, but this will not
+actually move the seek pointer. I<Localizing C<$.> will not localize
+the filehandle's line count>. Instead, it will localize perl's notion
+of which filehandle C<$.> is currently aliased to.
+
+C<$.> is reset when the filehandle is closed, but B<not> when an open
+filehandle is reopened without an intervening C<close()>. For more
+details, see L<perlop/"IE<sol>O Operators">. Because C<< <> >> never does
+an explicit close, line numbers increase across C<ARGV> files (but see
+examples in L<perlfunc/eof>).
+
+You can also use C<< 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.
+
+=item HANDLE->input_record_separator( EXPR )
+
+=item $INPUT_RECORD_SEPARATOR
+
+=item $RS
+
+=item $/
+X<$/> X<$RS> X<$INPUT_RECORD_SEPARATOR>
+
+The input record separator, newline by default. This influences Perl's
+idea of what a "line" is. Works like B<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
+C<undef> to read through the end of file. Setting it to C<"\n\n">
+means something slightly different than setting to C<"">, if the file
+contains consecutive empty lines. Setting to C<""> will treat two or
+more consecutive empty lines as a single empty line. Setting to
+C<"\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 C<$/> is a string, not a regex. B<awk> has to
+be better for something. :-)
+
+Setting C<$/> 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. 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 bytes from FILE. 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 will cause reading in the (rest of the) whole file.
+
+On VMS, record reads are done with the equivalent of C<sysread>,
+so it's best not to mix record and non-record reads on the same
+file. (This is unlikely to be a problem, because any file you'd
+want to read in record mode is probably unusable in line mode.)
+Non-VMS systems do normal I/O, so it's safe to mix record and
+non-record reads of a file.
+
+See also L<perlport/"Newlines">. Also see C<$.>.
+
+Mnemonic: / delimits line boundaries when quoting poetry.
+
+=item Handle->output_record_separator( EXPR )
+
+=item $OUTPUT_RECORD_SEPARATOR
+
+=item $ORS
+
+=item $\
+X<$\> X<$ORS> X<$OUTPUT_RECORD_SEPARATOR>
+
+The output record separator for the print operator. If defined, this
+value is printed after the last of print's arguments. Default is C<undef>.
+
+Mnemonic: you set C<$\> instead of adding "\n" at the end of the print.
+Also, it's just like C<$/>, but it's what you get "back" from Perl.
+
+=item HANDLE->autoflush( EXPR )
+
+=item $OUTPUT_AUTOFLUSH
+
+=item $|
+X<$|> X<autoflush> X<flush> X<$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; C<$|> 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 B<rsh> and
+want to see the output as it's happening. This has no effect on input
+buffering. See L<perlfunc/getc> for that. See L<perlfunc/select> on
+how to select the output channel. See also L<IO::Handle>.
+
+Mnemonic: when you want your pipes to be piping hot.
+
+=back
+
+=head3 Variables related to formats
+
+The special variables for formats are a subset of those for
+filehandles. See L<perlform> for more information about Perl's
+formats.
+
+=over 8
+
+=item $ACCUMULATOR
+
+=item $^A
+X<$^A> X<$ACCUMULATOR>
+
+The current value of the C<write()> accumulator for C<format()> lines.
+A format contains C<formline()> calls that put their result into
+C<$^A>. After calling its format, C<write()> prints out the contents
+of C<$^A> and empties. So you never really see the contents of C<$^A>
+unless you call C<formline()> yourself and then look at it. See
+L<perlform> and L<perlfunc/formline()>.
+
+=item HANDLE->format_formfeed(EXPR)
+
+=item $FORMAT_FORMFEED
+
+=item $^L
+X<$^L> X<$FORMAT_FORMFEED>
+
+What formats output as a form feed. The default is C<\f>.
+
+=item HANDLE->format_page_number(EXPR)
+
+=item $FORMAT_PAGE_NUMBER
+
+=item $%
+X<$%> X<$FORMAT_PAGE_NUMBER>
+
+The current page number of the currently selected output channel.
+
+Mnemonic: C<%> is page number in B<nroff>.
+
+=item HANDLE->format_lines_left(EXPR)
+
+=item $FORMAT_LINES_LEFT
+
+=item $-
+X<$-> X<$FORMAT_LINES_LEFT>
 
-Report C<goto &subroutine> as well.
+The number of lines left on the page of the currently selected output
+channel.
 
-=item 0x100
+Mnemonic: lines_on_page - lines_printed.
 
-Provide informative "file" names for evals based on the place they were compiled.
+=item Handle->format_line_break_characters EXPR
 
-=item 0x200
+=item $FORMAT_LINE_BREAK_CHARACTERS
 
-Provide informative names to anonymous subroutines based on the place they
-were compiled.
+=item $:
+X<$:> X<FORMAT_LINE_BREAK_CHARACTERS>
 
-=item 0x400
+The current set of characters after which a string may be broken to
+fill continuation fields (starting with C<^>) in a format. The default is
+S<" \n-">, to break on a space, newline, or a hyphen.
 
-Save source code lines into C<@{"_<$filename"}>.
+Mnemonic: a "colon" in poetry is a part of a line.
 
-=back
+=item HANDLE->format_lines_per_page(EXPR)
 
-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 L<perldebguts>.
+=item $FORMAT_LINES_PER_PAGE
 
-=item $LAST_REGEXP_CODE_RESULT
+=item $=
+X<$=> X<$FORMAT_LINES_PER_PAGE>
 
-=item $^R
-X<$^R> X<$LAST_REGEXP_CODE_RESULT>
+The current page length (printable lines) of the currently selected
+output channel. The default is 60.
 
-The result of evaluation of the last successful C<(?{ code })>
-regular expression assertion (see L<perlre>).  May be written to.
+Mnemonic: = has horizontal lines.
 
-=item $EXCEPTIONS_BEING_CAUGHT
+=item HANDLE->format_top_name(EXPR)
 
-=item $^S
-X<$^S> X<$EXCEPTIONS_BEING_CAUGHT>
+=item $FORMAT_TOP_NAME
 
-Current state of the interpreter.
+=item $^
+X<$^> X<$FORMAT_TOP_NAME>
 
-    $^S         State
-    ---------   -------------------
-    undef       Parsing module/eval
-    true (1)    Executing an eval
-    false (0)   Otherwise
+The name of the current top-of-page format for the currently selected
+output channel. The default is the name of the filehandle with C<_TOP>
+appended. For example, the default format top name for the C<STDOUT>
+filehanlde is C<STDOUT_TOP>.
 
-The first state may happen in $SIG{__DIE__} and $SIG{__WARN__} handlers.
+Mnemonic: points to top of page.
 
-=item $BASETIME
+=item HANDLE->format_name(EXPR)
 
-=item $^T
-X<$^T> X<$BASETIME>
+=item $FORMAT_NAME
 
-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 $~
+X<$~> X<$FORMAT_NAME>
 
-=item ${^TAINT}
+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 C<STDOUT>
+filehandle is just C<STDOUT>.
 
-Reflects if taint mode is on or off.  1 for on (the program was run with
-B<-T>), 0 for off, -1 when only taint warnings are enabled (i.e. with
-B<-t> or B<-TU>).  This variable is read-only.
+Mnemonic: brother to C<$^>.
 
-=item ${^UNICODE}
+=back
 
-Reflects certain Unicode settings of Perl.  See L<perlrun>
-documentation for the C<-C> switch for more information about
-the possible values. This variable is set during Perl startup
-and is thereafter read-only.
+=head2 Error Variables
+X<error> X<exception>
 
-=item ${^UTF8CACHE}
+The variables C<$@>, C<$!>, C<$^E>, and C<$?> 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.
 
-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.
+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:
 
-=item ${^UTF8LOCALE}
+       eval q{
+               open my $pipe, "/cdrom/install |" or die $!;
+               my @res = <$pipe>;
+               close $pipe or die "bad pipe: $?, $!";
+           };
 
-This variable indicates whether an 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 C<-CL> command-line
-switch); see L<perlrun> for more info on this.
+When perl executes the C<eval()> expression, it translates the
+C<open()>, C<< <PIPE> >>, and C<close> calls in the C run-time library
+and thence to the operating system kernel. perl sets C<$!> to
+the C library's C<errno> if one of these calls fails.
 
-=item $PERL_VERSION
+C<$@> is set if the string to be C<eval>-ed did not compile (this may
+happen if C<open> or C<close> were imported with bad prototypes), or
+if Perl code executed during evaluation C<die()>d. In these cases the
+value of C<$@> is the compile error, or the argument to C<die> (which
+will interpolate C<$!> and C<$?>). (See also L<Fatal>, though.)
 
-=item $^V
-X<$^V> X<$PERL_VERSION>
+Under a few operating systems, C<$^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 C<$^E> the same as C<$!>.
 
-The revision, version, and subversion of the Perl interpreter, represented
-as a C<version> object.
+Finally, C<$?> may be set to non-0 value if the external program
+F</cdrom/install> fails. The upper eight bits reflect specific error
+conditions encountered by the program (the program's C<exit()> value).
+The lower eight bits reflect mode of failure, like signal death and
+core dump information. See C<wait(2)> for details. In contrast to
+C<$!> and C<$^E>, which are set only if error condition is detected,
+the variable C<$?> is set on each C<wait> or pipe C<close>,
+overwriting the old value. This is more like C<$@>, which on every
+C<eval()> is always set on failure and cleared on success.
+
+For more details, see the individual descriptions at C<$@>, C<$!>,
+C<$^E>, and C<$?>.
 
-This variable first appeared in perl 5.6.0; earlier versions of perl will
-see an undefined value. Before perl 5.10.0 $^V was represented as a v-string.
+=over 8
 
-$^V can be used to determine whether the Perl interpreter executing a
-script is in the right range of versions.  (Mnemonic: use ^V for Version
-Control.)  Example:
+=item ${^CHILD_ERROR_NATIVE}
+X<$^CHILD_ERROR_NATIVE>
 
-    warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1
+The native status returned by the last pipe close, backtick (C<``>)
+command, successful call to C<wait()> or C<waitpid()>, or from the
+C<system()> operator. On POSIX-like systems this value can be decoded
+with the WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED,
+WSTOPSIG and WIFCONTINUED functions provided by the L<POSIX> module.
 
-To convert C<$^V> into its string representation use sprintf()'s
-C<"%vd"> conversion:
+Under VMS this reflects the actual VMS exit status; i.e. it is the
+same as C<$?> when the pragma C<use vmsish 'status'> is in effect.
 
-    printf "version is v%vd\n", $^V;  # Perl's version
+This variable was added in Perl 5.8.9.
 
-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.
+=item $EXTENDED_OS_ERROR
 
-See also C<$]> for an older representation of the Perl version.
+=item $^E
+X<$^E> X<$EXTENDED_OS_ERROR>
 
-=item $WARNING
+Error information specific to the current operating system. At the
+moment, this differs from C<$!> under only VMS, OS/2, and Win32 (and
+for MacPerl). On all other platforms, C<$^E> is always just the same
+as C<$!>.
 
-=item $^W
-X<$^W> X<$WARNING>
+Under VMS, C<$^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 C<$!>. This is particularly important when C<$!>
+is set to B<EVMSERR>.
 
-The current value of the warning switch, initially true if B<-w>
-was used, false otherwise, but directly modifiable.  (Mnemonic:
-related to the B<-w> switch.)  See also L<warnings>.
+Under OS/2, C<$^E> is set to the error code of the last call to OS/2
+API either via CRT, or directly from perl.
 
-=item ${^WARNING_BITS}
+Under Win32, C<$^E> always returns the last error information reported
+by the Win32 call C<GetLastError()> which describes the last error
+from within the Win32 API. Most Win32-specific code will report errors
+via C<$^E>. ANSI C and Unix-like calls set C<errno> and so most
+portable Perl code will report errors via C<$!>.
 
-The current set of warning checks enabled by the C<use warnings> pragma.
-See the documentation of C<warnings> for more details.
+Caveats mentioned in the description of C<$!> generally apply to
+C<$^E>, also.
 
-=item ${^WIN32_SLOPPY_STAT}
+This variable was added in Perl 5.003.
 
-If this variable is set to a true value, then 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.
+Mnemonic: Extra error explanation.
 
-This variable could be set in the F<sitecustomize.pl> file to
-configure the local Perl installation to use "sloppy" stat() by
-default.  See L<perlrun> for more information about site
-customization.
+=item $EXCEPTIONS_BEING_CAUGHT
 
-=item $EXECUTABLE_NAME
+=item $^S
+X<$^S> X<$EXCEPTIONS_BEING_CAUGHT>
 
-=item $^X
-X<$^X> X<$EXECUTABLE_NAME>
+Current state of the interpreter.
 
-The name used to execute the current copy of Perl, from C's
-C<argv[0]> or (where supported) F</proc/self/exe>.
+       $^S         State
+       ---------   -------------------
+       undef       Parsing module/eval
+       true (1)    Executing an eval
+       false (0)   Otherwise
 
-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.
+The first state may happen in C<$SIG{__DIE__}> and C<$SIG{__WARN__}>
+handlers.
 
-You usually can use the value of $^X to re-invoke an independent
-copy of the same perl that is currently running, e.g.,
+This variable was added in Perl 5.004.
 
-  @first_run = `$^X -le "print int rand 100 for 1..100"`;
+=item $WARNING
 
-But recall that not all operating systems support forking or
-capturing of the output of commands, so this complex statement
-may not be portable.
+=item $^W
+X<$^W> X<$WARNING>
 
-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:
+The current value of the warning switch, initially true if B<-w> was
+used, false otherwise, but directly modifiable.
 
-  # Build up a set of file names (not command names).
-  use Config;
-  $this_perl = $^X;
-  if ($^O ne 'VMS')
-     {$this_perl .= $Config{_exe}
-          unless $this_perl =~ m/$Config{_exe}$/i;}
+See also L<warnings>.
 
-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.
+Mnemonic: related to the B<-w> switch.
 
-  use Config;
-  $secure_perl_path = $Config{perlpath};
-  if ($^O ne 'VMS')
-     {$secure_perl_path .= $Config{_exe}
-          unless $secure_perl_path =~ m/$Config{_exe}$/i;}
+=item ${^WARNING_BITS}
+X<${^WARNING_BITS}>
 
-=item ARGV
-X<ARGV>
+The current set of warning checks enabled by the C<use warnings> pragma.
+See the documentation of C<warnings> for more details.
 
-The special filehandle that iterates over command-line filenames in
-C<@ARGV>. Usually written as the null filehandle in the angle operator
-C<< <> >>. Note that currently C<ARGV> only has its magical effect
-within the C<< <> >> operator; elsewhere it is just a plain filehandle
-corresponding to the last file opened by C<< <> >>. In particular,
-passing C<\*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 C<@ARGV>.
+This variable was added in Perl 5.10.
 
-=item $ARGV
-X<$ARGV>
+=item $OS_ERROR
 
-contains the name of the current file when reading from <>.
+=item $ERRNO
 
-=item @ARGV
-X<@ARGV>
+=item $!
+X<$!> X<$ERRNO> X<$OS_ERROR>
 
-The array @ARGV contains the command-line arguments intended for
-the script.  C<$#ARGV> is generally the number of arguments minus
-one, because C<$ARGV[0]> is the first argument, I<not> the program's
-command name itself.  See C<$0> for the command name.
+If used numerically, yields the current value of the C C<errno>
+variable, or in other words, if a system or library call fails, it
+sets this variable. This means that the value of C<$!> is meaningful
+only I<immediately> after a B<failure>:
 
-=item ARGVOUT
-X<ARGVOUT>
+       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,
+    # here $! is meaningless.
 
-The special filehandle that points to the currently open output file
-when doing edit-in-place processing with B<-i>.  Useful when you have
-to do a lot of inserting and don't want to keep modifying $_.  See
-L<perlrun> for the B<-i> switch.
+The I<meaningless> stands for anything: zero, non-zero,
+C<undef>. A successful system or library call does B<not> set the
+variable to zero.
 
-=item @F
-X<@F>
+If used as a string, yields the corresponding system error string. You
+can assign a number to C<$!> to set I<errno> if, for instance, you
+want C<"$!"> to return the string for error I<n>, or you want to set
+the exit value for the C<die()> operator.
 
-The array @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'>.
+Mnemonic: What just went bang?
 
-=item @INC
-X<@INC>
+=item %OS_ERROR
 
-The array @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:
+=item %ERRNO
 
-    use lib '/mypath/libdir/';
-    use SomeMod;
+=item %!
+X<%!> X<%OS_ERROR> X<%ERRNO>
 
-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 L<perlfunc/require> for details.
+Each element of C<%!> has a true value only if C<$!> is set to that
+value. For example, C<$!{ENOENT}> is true if and only if the current
+value of C<$!> is C<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). To
+check if a particular key is meaningful on your system, use C<exists
+$!{the_key}>; for a list of legal keys, use C<keys %!>. See L<Errno>
+for more information, and also see L</$!>.
 
-=item @ARG
+This variable was added in Perl 5.005.
 
-=item @_
-X<@_> X<@ARG>
+=item $CHILD_ERROR
 
-Within a subroutine the array @_ contains the parameters passed to that
-subroutine.  See L<perlsub>.
+=item $?
+X<$?> X<$CHILD_ERROR>
 
-=item %INC
-X<%INC>
+The status returned by the last pipe close, backtick (C<``>) command,
+successful call to C<wait()> or C<waitpid()>, or from the C<system()>
+operator. This is just the 16-bit status word returned by the
+traditional Unix C<wait()> system call (or else is made up to look
+like it). Thus, the exit value of the subprocess is really (C<<< $? >>
+8 >>>), and C<$? & 127> gives which signal, if any, the process died
+from, and C<$? & 128> reports whether there was a core dump.
 
-The hash %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.
+Additionally, if the C<h_errno> variable is supported in C, its value
+is returned via C<$?> if any C<gethost*()> function fails.
 
-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 %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.
+If you have installed a signal handler for C<SIGCHLD>, the
+value of C<$?> will usually be wrong outside that handler.
 
-=item %ENV
+Inside an C<END> subroutine C<$?> contains the value that is going to be
+given to C<exit()>. You can modify C<$?> in an C<END> subroutine to
+change the exit status of your program. For example:
 
-=item $ENV{expr}
-X<%ENV>
+    END {
+       $? = 1 if $? == 255;  # die would make it 255
+    }
 
-The hash %ENV contains your current environment.  Setting a
-value in C<ENV> changes the environment for any child processes
-you subsequently fork() off.
+Under VMS, the pragma C<use vmsish 'status'> makes C<$?> reflect the
+actual VMS exit status, instead of the default emulation of POSIX
+status; see L<perlvms/$?> for details.
 
-=item %SIG
+Mnemonic: similar to B<sh> and B<ksh>.
 
-=item $SIG{expr}
-X<%SIG>
+=item $EVAL_ERROR
 
-The hash C<%SIG> contains signal handlers for signals.  For example:
+=item $@
+X<$@> X<$EVAL_ERROR>
 
-    sub handler {      # 1st argument is signal name
-       my($sig) = @_;
-       print "Caught a SIG$sig--shutting down\n";
-       close(LOG);
-       exit(0);
-    }
+The Perl syntax error message from the last C<eval()> operator. If C<$@> is
+the null string, the last C<eval()> parsed and executed correctly
+(although the operations you invoked may have failed in the normal
+fashion).
 
-    $SIG{'INT'}  = \&handler;
-    $SIG{'QUIT'} = \&handler;
-    ...
-    $SIG{'INT'}  = 'DEFAULT';  # restore default action
-    $SIG{'QUIT'} = 'IGNORE';   # ignore SIGQUIT
+Warning messages are not collected in this variable. You can, however,
+set up a routine to process warnings by setting C<$SIG{__WARN__}> as
+described in L</%SIG>.
 
-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.
+Mnemonic: Where was the syntax error "at"?
 
-Here are some other examples:
+=back
 
-    $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??
+=head2 Deprecated and removed variables
 
-Be sure not to use a bareword as the name of a signal handler,
-lest you inadvertently call it. 
+Deprecating a variable announces the intent of the perl maintainers to
+eventually remove the variable from the langauge. It may still be
+available despite its status. Using a deprecated variable triggers
+a warning.
 
-If your system has the sigaction() function then signal handlers are
-installed using it.  This means you get reliable signal handling.
+Once a variable is removed, its use triggers an error telling you
+the variable is unsupported.
 
-The default delivery policy of signals changed in Perl 5.8.0 from 
-immediate (also known as "unsafe") to deferred, also known as 
-"safe signals".  See L<perlipc> for more information.
+See L<perldiag> for details about error messages.
 
-Certain internal hooks can be also set using the %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:
+=over 8
 
-    local $SIG{__WARN__} = sub { die $_[0] };
-    eval $proggie;
+=item $OFMT
 
-As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can
-disable warnings using the empty subroutine:
+=item $#
+X<$#> X<$OFMT>
 
-    local $SIG{__WARN__} = sub {};
+C<$#> was a variable that you could be use to format printed numbers.
+After a deprecation cycle, its magic was removed in Perl 5.10 and
+using it now triggers a warning: C<$# is no longer supported>.
 
-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>, 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__>.
+This is not the sigil you use in front of an array name to get the
+last index, like C<$#array>. That's still how you get the last index
+of an array in Perl. The two have nothing to do with each other.
 
-Due to an implementation glitch, the C<$SIG{__DIE__}> hook is called
-even inside an 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...
-         To see backtrace try starting Perl with -MCarp switch";
-
-Here the first line will load Carp I<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.
+Deprecated in Perl 5.
 
-See L<perlfunc/die>, L<perlfunc/warn>, L<perlfunc/eval>, and
-L<warnings> for additional information.
+Removed in Perl 5.10.
 
-=back
+=item $*
+X<$*>
 
-=head2 Error Indicators
-X<error> X<exception>
+C<$*> was a variable that you could use to enable multiline matching.
+After a deprecation cycle, its magic was removed in Perl 5.10.
+Using it now triggers a warning: C<$* is no longer supported>.
+You should use the C</s> and C</m> regexp modifiers instead.
 
-The variables C<$@>, C<$!>, C<$^E>, and C<$?> 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.
+Deprecated in Perl 5.
 
-To illustrate the differences between these variables, consider the 
-following Perl expression, which uses a single-quoted string:
+Removed in Perl 5.10.
 
-    eval q{
-       open my $pipe, "/cdrom/install |" or die $!;
-       my @res = <$pipe>;
-       close $pipe or die "bad pipe: $?, $!";
-    };
+=item $ARRAY_BASE
 
-After execution of this statement all 4 variables may have been set.  
+=item $[
+X<$[> X<$ARRAY_BASE>
 
-C<$@> is set if the string to be C<eval>-ed did not compile (this
-may happen if C<open> or C<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 C<die>
-(which will interpolate C<$!> and C<$?>).  (See also L<Fatal>,
-though.)
+This variable stores the index of the first element in an array, and
+of the first character in a substring. You used to be able to assign to
+this variable, but you can't do that anymore. It's now always 0, like
+it should be.
 
-When the eval() expression above is executed, open(), C<< <PIPE> >>,
-and C<close> are translated to calls in the C run-time library and
-thence to the operating system kernel.  C<$!> is set to the C library's
-C<errno> if one of these calls fails. 
+Mnemonic: [ begins subscripts.
 
-Under a few operating systems, C<$^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 C<$^E>
-the same as C<$!>.
+This variable is read-only.
 
-Finally, C<$?> may be set to non-0 value if the external program
-F</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) for details.  In
-contrast to C<$!> and C<$^E>, which are set only if error condition
-is detected, the variable C<$?> is set on each C<wait> or pipe
-C<close>, overwriting the old value.  This is more like C<$@>, which
-on every eval() is always set on failure and cleared on success.
+Deprecated in Perl 5.12.
 
-For more details, see the individual descriptions at C<$@>, C<$!>, C<$^E>,
-and C<$?>.
+=item $OLD_PERL_VERSION
 
-=head2 Technical Note on the Syntax of Variable Names
+=item $]
+X<$]> X<$OLD_PERL_VERSION>
 
-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
-C<::> or C<'>.  In this case, the part before the last C<::> or
-C<'> is taken to be a I<package qualifier>; see L<perlmod>.
+See C<$^V> for a more modern representation of the Perl version that allows
+accurate string comparisons.
 
-Perl variable names may also be a sequence of digits or a single
-punctuation or control character.  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.  Perl has a special syntax for the single-control-character
-names: It understands C<^X> (caret C<X>) to mean the control-C<X>
-character.  For example, the notation C<$^W> (dollar-sign caret
-C<W>) is the scalar variable whose name is the single character
-control-C<W>.  This is better than typing a literal control-C<W>
-into your program.
+The version + patchlevel / 1000 of the Perl interpreter. This variable
+can be used to determine whether the Perl interpreter executing a
+script is in the right range of versions:
 
-Finally, new in Perl 5.6, Perl variable names may be alphanumeric
-strings that begin with control characters (or better yet, a caret).
-These variables must be written in the form C<${^Foo}>; the braces
-are not optional.  C<${^Foo}> denotes the scalar variable whose
-name is a control-C<F> followed by two C<o>'s.  These variables are
-reserved for future special uses by Perl, except for the ones that
-begin with C<^_> (control-underscore or caret-underscore).  No
-control-character name that begins with C<^_> will acquire a special
-meaning in any future version of Perl; such names may therefore be
-used safely in programs.  C<$^_> itself, however, I<is> reserved.
+    warn "No checksumming!\n" if $] < 3.019;
 
-Perl identifiers that begin with digits, control characters, or
-punctuation characters are exempt from the effects of the C<package>
-declaration and are always forced to be in package C<main>; they are
-also exempt from C<strict 'vars'> errors.  A few other names are also
-exempt in these ways:
+The floating point representation can sometimes lead to inaccurate
+numeric comparisons.
 
-       ENV             STDIN
-       INC             STDOUT
-       ARGV            STDERR
-       ARGVOUT         _
-       SIG
+See also the documentation of C<use VERSION> and C<require VERSION>
+for a convenient way to fail if the running Perl interpreter is too old.
 
-In particular, the new special C<${^_XYZ}> variables are always taken
-to be in package C<main>, regardless of any C<package> declarations
-presently in scope.  
+Mnemonic: Is this version of perl in the right bracket?
 
-=head1 BUGS
+Deprecated in Perl 5.6.
 
-Due to an unfortunate accident of Perl's implementation, C<use
-English> imposes a considerable performance penalty on all regular
-expression matches in a program, regardless of whether they occur
-in the scope of C<use English>.  For that reason, saying C<use
-English> in libraries is strongly discouraged.  See the
-Devel::SawAmpersand module documentation from CPAN
-( http://www.cpan.org/modules/by-module/Devel/ )
-for more information. Writing C<use English '-no_match_vars';>
-avoids the performance penalty.
+=back
 
-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.
+=cut