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 9acdcfc..1dff9ce 100644 (file)
@@ -263,9 +263,9 @@ X<$0> X<$PROGRAM_NAME>
 Contains the name of the program being executed.
 
 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
+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
+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.
 
@@ -327,7 +327,7 @@ which means
 
        ($foo{$a},$foo{$b},$foo{$c})
 
-Default is "\034", the same as SUBSEP in B<awk>.  If your keys contain
+Default is "\034", the same as SUBSEP in B<awk>. If your keys contain
 binary data there might not be any safe value for C<$;>.
 
 Consider using "real" multidimensional arrays as described
@@ -389,7 +389,7 @@ X<$^C> X<$COMPILING>
 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
+time rather than normal, deferred loading. Setting
 C<$^C = 1> is similar to calling C<B::minus_c>.
 
 This variable was added in Perl 5.6.
@@ -406,7 +406,7 @@ C<$^D = 10> or C<$^D = "st">.
 Mnemonic: value of B<-D> switch.
 
 =item ${^ENCODING}
-X<$^ENCODING>
+X<${^ENCODING}>
 
 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
@@ -440,11 +440,118 @@ time of the C<exec()>.
 X<@F>
 
 The array C<@F> contains the fields of each line read in when autosplit
-mode is turned on. See L<perlrun> for the B<-a> switch.  This array
+mode is turned on. See L<perlrun> for the B<-a> switch. This array
 is package-specific, and must be declared or given a full package name
 if not in package main when running under C<strict 'vars'>.
 
+=item ${^GLOBAL_PHASE}
+X<${^GLOBAL_PHASE}>
+
+The current phase of the perl interpreter.
+
+Possible values are:
+
+=over 8
+
+=item CONSTRUCT
+
+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.
+
+=item START
+
+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.
+
+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}>.
+
+=item CHECK
+
+Execution of any C<CHECK> blocks.
+
+=item INIT
+
+Similar to "CHECK", but for C<INIT>-blocks, not C<CHECK> blocks.
+
+=item RUN
+
+The main run-time, i.e. the execution of C<PL_main_root>.
+
+=item END
+
+Execution of any C<END> blocks.
+
+=item DESTRUCT
+
+Global destruction.
+
+=back
+
+Also note that there's no value for UNITCHECK-blocks. That's because
+those are run for each compilation unit individually, and therefore is
+not a global interpreter phase.
+
+Not every program has to go through each of the possible phases, but
+transition from one phase to another can only happen in the order
+described in the above list.
+
+An example of all of the phases Perl code can see:
+
+    BEGIN { print "compile-time: ${^GLOBAL_PHASE}\n" }
+
+    INIT  { print "init-time: ${^GLOBAL_PHASE}\n" }
+
+    CHECK { print "check-time: ${^GLOBAL_PHASE}\n" }
+
+    {
+        package Print::Phase;
+
+        sub new {
+            my ($class, $time) = @_;
+            return bless \$time, $class;
+        }
+
+        sub DESTROY {
+            my $self = shift;
+            print "$$self: ${^GLOBAL_PHASE}\n";
+        }
+    }
+
+    print "run-time: ${^GLOBAL_PHASE}\n";
+
+    my $runtime = Print::Phase->new(
+        "lexical variables are garbage collected before END"
+    );
+
+    END   { print "end-time: ${^GLOBAL_PHASE}\n" }
+
+    our $destruct = Print::Phase->new(
+        "package variables are garbage collected after END"
+    );
+
+This will print out
+
+    compile-time: START
+    check-time: CHECK
+    init-time: INIT
+    run-time: RUN
+    lexical variables are garbage collected before END: RUN
+    end-time: END
+    package variables are garbage collected after END: DESTRUCT
+
+This variable was added in Perl 5.14.0.
+
 =item $^H
+X<$^H>
 
 WARNING: This variable is strictly for internal use only. Its availability,
 behavior, and contents are subject to change without notice.
@@ -478,11 +585,11 @@ 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.
 
-Substitution of the above BEGIN block with:
+Substitution of C<BEGIN { add_100() }> block with:
 
        BEGIN { require strict; strict->import('vars') }
 
-demonstrates how C<use strict 'vars'> is implemented.  Here's a conditional
+demonstrates how C<use strict 'vars'> is implemented. Here's a conditional
 version of the same lexical pragma:
 
        BEGIN { require strict; strict->import('vars') if $condition }
@@ -490,6 +597,7 @@ version of the same lexical pragma:
 This variable was added in Perl 5.003.
 
 =item %^H
+X<%^H>
 
 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>.
@@ -500,11 +608,11 @@ This variable was added in Perl 5.6.
 X<@INC>
 
 The array C<@INC> contains the list of places that the C<do EXPR>,
-C<require>, or C<use> constructs look for their library files.  It
+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,
+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:
@@ -582,6 +690,7 @@ between the variants.
 This variable was added in Perl 5.003.
 
 =item ${^OPEN}
+X<${^OPEN}>
 
 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
@@ -648,12 +757,10 @@ Save source code lines into C<@{"_<$filename"}>.
 =back
 
 Some bits may be relevant at compile-time only, some at
-run-time only.  This is a new mechanism and the details may change.
+run-time only. This is a new mechanism and the details may change.
 See also L<perldebguts>.
 
 =item %SIG
-
-=item $SIG{expr}
 X<%SIG>
 
 The hash C<%SIG> contains signal handlers for signals. For example:
@@ -690,12 +797,12 @@ are installed using it. This means you get reliable signal handling.
 
 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.
+signals". See L<perlipc> for more information.
 
 Certain internal hooks can be also set using the C<%SIG> hash. The
 routine indicated by C<$SIG{__WARN__}> is called when a warning
-message is about to be printed.  The warning message is passed as the
-first argument.  The presence of a C<__WARN__> hook causes the
+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:
@@ -743,7 +850,7 @@ C<Carp> was available. The third line will be executed only if C<Carp> was
 not available.
 
 Having to even think about the C<$^S> variable in your exception
-handlers is simply wrong.  C<$SIG{__DIE__}> as currently implemented
+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.
 
@@ -760,6 +867,7 @@ epoch (beginning of 1970). The values returned by the B<-M>, B<-A>,
 and B<-C> filetests are based on this value.
 
 =item ${^TAINT}
+X<${^TAINT}>
 
 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
@@ -770,8 +878,9 @@ This variable is read-only.
 This variable was added in Perl 5.8.
 
 =item ${^UNICODE}
+X<${^UNICODE}>
 
-Reflects certain Unicode settings of Perl.  See L<perlrun>
+Reflects certain Unicode settings of Perl. See L<perlrun>
 documentation for the C<-C> switch for more information about
 the possible values.
 
@@ -780,6 +889,7 @@ This variable is set during Perl startup and is thereafter read-only.
 This variable was added in Perl 5.8.2.
 
 =item ${^UTF8CACHE}
+X<${^UTF8CACHE}>
 
 This variable controls the state of the internal UTF-8 offset caching code.
 1 for on (the default), 0 for off, -1 to debug the caching code by checking
@@ -788,6 +898,7 @@ all its results against linear scans, and panicking on any discrepancy.
 This variable was added in Perl 5.8.9.
 
 =item ${^UTF8LOCALE}
+X<${^UTF8LOCALE}>
 
 This variable indicates whether a UTF-8 locale was detected by perl at
 startup. This information is used by perl when it's in
@@ -828,7 +939,7 @@ This variable was added in Perl 5.6.
 Mnemonic: use ^V for Version Control.
 
 =item ${^WIN32_SLOPPY_STAT}
-X<sitecustomize> X<sitecustomize.pl>
+X<${^WIN32_SLOPPY_STAT}> X<sitecustomize> X<sitecustomize.pl>
 
 If this variable is set to a true value, then C<stat()> on Windows will
 not try to open the file. This means that the link count cannot be
@@ -1010,7 +1121,7 @@ This variable is read-only and dynamically-scoped.
 =item $PREMATCH
 
 =item $`
-X<$`> X<$PREMATCH>
+X<$`> X<$PREMATCH> X<${^PREMATCH}>
 
 The string preceding whatever was matched by the last successful
 pattern match, not counting any matches hidden within a BLOCK or C<eval>
@@ -1028,7 +1139,7 @@ This variable is read-only and dynamically-scoped.
 Mnemonic: C<`> often precedes a quoted string.
 
 =item ${^PREMATCH}
-X<${^PREMATCH}>
+X<$`> X<${^PREMATCH}>
 
 This is similar to C<$`> ($PREMATCH) except that it does not incur the
 performance penalty associated with that variable, and is only guaranteed
@@ -1042,7 +1153,7 @@ This variable is read-only and dynamically-scoped.
 =item $POSTMATCH
 
 =item $'
-X<$'> X<$POSTMATCH>
+X<$'> X<$POSTMATCH> X<${^POSTMATCH}> X<@->
 
 The string following whatever was matched by the last successful
 pattern match (not counting any matches hidden within a BLOCK or C<eval()>
@@ -1064,7 +1175,7 @@ This variable is read-only and dynamically-scoped.
 Mnemonic: C<'> often follows a quoted string.
 
 =item ${^POSTMATCH}
-X<${^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
@@ -1093,7 +1204,7 @@ Mnemonic: be positive and forward looking.
 =item $LAST_SUBMATCH_RESULT
 
 =item $^N
-X<$^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
@@ -1124,7 +1235,7 @@ 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
+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.
 
@@ -1133,7 +1244,7 @@ This variable was added in Perl 5.6.
 =item %LAST_PAREN_MATCH
 
 =item %+
-X<%+>
+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
@@ -1179,7 +1290,7 @@ 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
+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.
 
@@ -1203,8 +1314,10 @@ After a match against some variable C<$var>:
 
 This variable was added in Perl 5.6.
 
+=item %LAST_MATCH_START
+
 =item %-
-X<%->
+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
@@ -1260,6 +1373,7 @@ 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.
@@ -1267,6 +1381,7 @@ 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
@@ -1385,12 +1500,12 @@ changes to the special variables.
 =item $ARGV
 X<$ARGV>
 
-contains the name of the current file when reading from <>.
+Contains the name of the current file when reading from C<< <> >>.
 
 =item @ARGV
 X<@ARGV>
 
-The array @ARGV contains the command-line arguments intended for
+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.
@@ -1415,7 +1530,7 @@ 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 Handle->output_field_separator( EXPR )
 
 =item $OUTPUT_FIELD_SEPARATOR
 
@@ -1429,7 +1544,7 @@ 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 HANDLE->input_line_number( EXPR )
 
 =item $INPUT_LINE_NUMBER
 
@@ -1441,7 +1556,7 @@ 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
+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
@@ -1464,7 +1579,7 @@ which handle you last accessed.
 
 Mnemonic: many programs use "." to mean the current line number.
 
-=item HANDLE->input_record_separator(EXPR)
+=item HANDLE->input_record_separator( EXPR )
 
 =item $INPUT_RECORD_SEPARATOR
 
@@ -1474,7 +1589,7 @@ Mnemonic: many programs use "." to mean the current line number.
 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
+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
@@ -1489,7 +1604,7 @@ the next paragraph, even if it's a newline.
     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
+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
@@ -1501,29 +1616,25 @@ referenced integer. So this:
     open my $fh, "<", $myfile or die $!;
     local $_ = <$fh>;
 
-will read a record of no more than 32768 bytes from FILE.  If you're
+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
+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
+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<$.>.
+See also L<perlport/"Newlines">. Also see C<$.>.
 
 Mnemonic: / delimits line boundaries when quoting poetry.
 
-=item HANDLE->autoflush(EXPR)
-
-=item $OUTPUT_AUTOFLUSH
-
-=item Handle->output_record_separator EXPR
+=item Handle->output_record_separator( EXPR )
 
 =item $OUTPUT_RECORD_SEPARATOR
 
@@ -1538,19 +1649,23 @@ 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
+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
+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
+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.
@@ -1560,16 +1675,11 @@ Mnemonic: when you want your pipes to be piping hot.
 =head3 Variables related to formats
 
 The special variables for formats are a subset of those for
-filehandles so they have
-
-See L<perlform> for more information about Perl's formats.
+filehandles. See L<perlform> for more information about Perl's
+formats.
 
 =over 8
 
-=item HANDLE->format_formfeed(EXPR)
-
-=item $FORMAT_FORMFEED
-
 =item $ACCUMULATOR
 
 =item $^A
@@ -1577,11 +1687,15 @@ 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
+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>
 
@@ -1677,27 +1791,27 @@ interpreter, C library, operating system, or an external program,
 respectively.
 
 To illustrate the differences between these variables, consider the
-following Perl expression, which uses a single-quoted string:
+following Perl expression, which uses a single-quoted string. After
+execution of this statement, perl may have set all four special error
+variables:
 
-    eval q{
-       open my $pipe, "/cdrom/install |" or die $!;
-       my @res = <$pipe>;
-       close $pipe or die "bad pipe: $?, $!";
-    };
+       eval q{
+               open my $pipe, "/cdrom/install |" or die $!;
+               my @res = <$pipe>;
+               close $pipe or die "bad pipe: $?, $!";
+           };
 
-After execution of this statement all 4 variables may have been set.
+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.
 
 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
+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.)
 
-When the C<eval()> expression above is executed, C<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.
-
 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<$!>.
@@ -1717,8 +1831,6 @@ C<$^E>, and C<$?>.
 
 =over 8
 
-=item $EXTENDED_OS_ERROR
-
 =item ${^CHILD_ERROR_NATIVE}
 X<$^CHILD_ERROR_NATIVE>
 
@@ -1733,6 +1845,8 @@ same as C<$?> when the pragma C<use vmsish 'status'> is in effect.
 
 This variable was added in Perl 5.8.9.
 
+=item $EXTENDED_OS_ERROR
+
 =item $^E
 X<$^E> X<$EXTENDED_OS_ERROR>
 
@@ -1769,11 +1883,11 @@ X<$^S> X<$EXCEPTIONS_BEING_CAUGHT>
 
 Current state of the interpreter.
 
-    $^S         State
-    ---------   -------------------
-    undef       Parsing module/eval
-    true (1)    Executing an eval
-    false (0)   Otherwise
+       $^S         State
+       ---------   -------------------
+       undef       Parsing module/eval
+       true (1)    Executing an eval
+       false (0)   Otherwise
 
 The first state may happen in C<$SIG{__DIE__}> and C<$SIG{__WARN__}>
 handlers.
@@ -1793,6 +1907,7 @@ See also L<warnings>.
 Mnemonic: related to the B<-w> switch.
 
 =item ${^WARNING_BITS}
+X<${^WARNING_BITS}>
 
 The current set of warning checks enabled by the C<use warnings> pragma.
 See the documentation of C<warnings> for more details.
@@ -1811,18 +1926,19 @@ 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>:
 
-    if (open my $fh, "<", $filename) {
-       # Here $! is meaningless.
-       ...
-    } else {
-       # ONLY here is $! meaningful.
-       ...
-       # Already here $! might be meaningless.
+       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.
 
-In the above I<meaningless> stands for anything: zero, non-zero,
+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.
 
@@ -1838,7 +1954,7 @@ Mnemonic: What just went bang?
 =item %ERRNO
 
 =item %!
-X<%!>
+X<%!> X<%OS_ERROR> X<%ERRNO>
 
 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
@@ -1847,7 +1963,7 @@ 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<$!>.
+for more information, and also see L</$!>.
 
 This variable was added in Perl 5.005.
 
@@ -1896,7 +2012,7 @@ fashion).
 
 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.
+described in L</%SIG>.
 
 Mnemonic: Where was the syntax error "at"?
 
@@ -1916,8 +2032,10 @@ See L<perldiag> for details about error messages.
 
 =over 8
 
+=item $OFMT
+
 =item $#
-X<$#>
+X<$#> X<$OFMT>
 
 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
@@ -1943,11 +2061,13 @@ Deprecated in Perl 5.
 
 Removed in Perl 5.10.
 
+=item $ARRAY_BASE
+
 =item $[
-X<$[>
+X<$[> X<$ARRAY_BASE>
 
 This variable stores the index of the first element in an array, and
-of the first character in a substring. You use to be able to assign to
+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.
 
@@ -1957,8 +2077,13 @@ This variable is read-only.
 
 Deprecated in Perl 5.12.
 
+=item $OLD_PERL_VERSION
+
 =item $]
-X<$]>
+X<$]> X<$OLD_PERL_VERSION>
+
+See C<$^V> for a more modern representation of the Perl version that allows
+accurate string comparisons.
 
 The version + patchlevel / 1000 of the Perl interpreter. This variable
 can be used to determine whether the Perl interpreter executing a
@@ -1966,13 +2091,12 @@ script is in the right range of versions:
 
     warn "No checksumming!\n" if $] < 3.019;
 
+The floating point representation can sometimes lead to inaccurate
+numeric comparisons.
+
 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.
 
-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.
-
 Mnemonic: Is this version of perl in the right bracket?
 
 Deprecated in Perl 5.6.