This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
patch for perlvar.pod
[perl5.git] / pod / perlvar.pod
index f0cb109..8c0b91b 100644 (file)
@@ -99,7 +99,7 @@ The implicit iterator variable in the grep() and map() functions.
 
 =item *
 
-The default place to put an input record when a C<E<lt>FHE<gt>>
+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.
 
@@ -111,7 +111,22 @@ test.  Outside a C<while> test, this will not happen.
 
 =over 8
 
-=item $E<lt>I<digits>E<gt>
+=item $a
+
+=item $b
+
+Special package variables when using sort(), see L<perlfunc/sort>.
+Because of this specialness $a and $b don't need to be declared
+(using local(), use vars, or our()) even when using the 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.
+
+=back
+
+=over 8
+
+=item $<I<digits>>
 
 Contains the subpattern from the corresponding set of capturing
 parentheses from the last pattern match, not counting patterns
@@ -165,43 +180,68 @@ performance penalty on all regular expression matches.  See L<BUGS>.
 
 =item $+
 
-The last bracket matched by the last search pattern.  This is useful if
-you don't know which one of a set of alternative patterns matched.  For
-example:
+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 = $+);
 
 (Mnemonic: be positive and forward looking.)
 This variable is read-only and dynamically scoped to the current BLOCK.
 
-=item @+
+=item $^N
 
-$+[0] is the offset of the end of the last successful match.
-C<$+[>I<n>C<]> is the offset of the end of the substring matched by
-I<n>-th subpattern, or undef if the subpattern did not match.
+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.)
 
-Thus after a match against $_, $& coincides with C<substr $_, $-[0],
-$+[0] - $-[0]>.  Similarly, C<$>I<n> coincides with C<substr $_, $-[>I<n>C<],
-$+[>I<n>C<] - $-[>I<n>C<]> if C<$-[>I<n>C<]> is defined, and $+ coincides with
-C<substr $_, $-[$#-], $+[$#-]>.  One can use C<$#+> to find the number
-of subgroups in the last successful match.  Contrast with
-C<$#E<45>>, the last I<matched> subgroup.  Compare with C<@E<45>>.
+This is primarly 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 is dynamically scoped to the current BLOCK.
+
+=item @LAST_MATCH_END
+
+=item @+
+
+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.
 
 =item $MULTILINE_MATCHING
 
 =item $*
 
-Set to 1 to do multi-line matching within a string, 0 to tell Perl
-that it can assume that strings contain a single line, for the purpose
-of optimizing pattern matches.  Pattern matches on strings containing
-multiple newlines can produce confusing results when C<$*> is 0.  Default
-is 0.  (Mnemonic: * matches multiple things.)  This variable
-influences the interpretation of only C<^> and C<$>.  A literal newline can
-be searched for even when C<$* == 0>.
+Set to a non-zero integer value to do multi-line matching within a
+string, 0 (or undefined) to tell Perl that it can assume that strings
+contain a single line, for the purpose of optimizing pattern matches.
+Pattern matches on strings containing multiple newlines can produce
+confusing results when C<$*> is 0 or undefined. Default is undefined.
+(Mnemonic: * matches multiple things.) This variable influences the
+interpretation of only C<^> and C<$>. A literal newline can be searched
+for even when C<$* == 0>.
 
 Use of C<$*> is deprecated in modern Perl, supplanted by 
 the C</s> and C</m> modifiers on pattern matching.
 
+Assigning a non-numerical value to C<$*> triggers a warning (and makes
+C<$*> act if C<$* == 0>), while assigning a numerical value to C<$*>
+makes that an implicit C<int> is applied on the value.
+
 =item input_line_number HANDLE EXPR
 
 =item $INPUT_LINE_NUMBER
@@ -215,7 +255,7 @@ you just read() (or called a C<seek> or C<tell> on).  The value
 may be different from the actual physical line number in the file,
 depending on what notion of "line" is in effect--see C<$/> on how
 to change that.  An explicit close on a filehandle resets the line
-number.  Because C<E<lt>E<gt>> never does an explicit close, line
+number.  Because C<< <> >> never does an explicit close, line
 numbers increase across ARGV files (but see examples in L<perlfunc/eof>).
 Consider this variable read-only: setting it does not reposition
 the seek pointer; you'll have to do that on your own.  Localizing C<$.>
@@ -223,7 +263,7 @@ has the effect of also localizing Perl's notion of "the last read
 filehandle".  (Mnemonic: many programs use "." to mean the current line
 number.)
 
-=item input_record_separator HANDLE EXPR
+=item IO::Handle->input_record_separator EXPR
 
 =item $INPUT_RECORD_SEPARATOR
 
@@ -294,7 +334,7 @@ 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.  (Mnemonic: when you want your pipes to be piping hot.)
 
-=item output_field_separator HANDLE EXPR
+=item IO::Handle->output_field_separator EXPR
 
 =item $OUTPUT_FIELD_SEPARATOR
 
@@ -309,7 +349,7 @@ you would set B<awk>'s OFS variable to specify what is printed
 between fields.  (Mnemonic: what is printed when there is a "," in
 your print statement.)
 
-=item output_record_separator HANDLE EXPR
+=item IO::Handle->output_record_separator EXPR
 
 =item $OUTPUT_RECORD_SEPARATOR
 
@@ -412,6 +452,8 @@ channel.
 Used with formats.
 (Mnemonic: lines_on_page - lines_printed.)
 
+=item @LAST_MATCH_START
+
 =item @-
 
 $-[0] is the offset of the start of the last successful match.
@@ -421,11 +463,36 @@ I<n>-th subpattern, or undef if the subpattern did not match.
 Thus after a match against $_, $& coincides with C<substr $_, $-[0],
 $+[0] - $-[0]>.  Similarly, C<$>I<n> coincides with C<substr $_, $-[>I<n>C<],
 $+[>I<n>C<] - $-[>I<n>C<]> if C<$-[>I<n>C<]> is defined, and $+ coincides with
-C<substr $_, $-[$#-], $+[$#-]>.  One can use C<$#E<45>> to find the last
+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 $1
+begins, C<$-[2]> the offset where $2 begins, and so on.
+
+After a match against some variable $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
+
 =item format_name HANDLE EXPR
 
 =item $FORMAT_NAME
@@ -446,7 +513,7 @@ 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.)
 
-=item format_line_break_characters HANDLE EXPR
+=item IO::Handle->format_line_break_characters EXPR
 
 =item $FORMAT_LINE_BREAK_CHARACTERS
 
@@ -457,7 +524,7 @@ 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 format_formfeed HANDLE EXPR
+=item IO::Handle->format_formfeed EXPR
 
 =item $FORMAT_FORMFEED
 
@@ -484,7 +551,7 @@ 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
 wait() system call (or else is made up to look like it).  Thus, the
-exit value of the subprocess is really (C<$? E<gt>E<gt> 8>), and
+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>.)
@@ -505,7 +572,7 @@ change the exit status of your program.  For example:
 
 Under VMS, the pragma C<use vmsish 'status'> makes C<$?> reflect the
 actual VMS exit status, instead of the default emulation of POSIX
-status.
+status; see L<perlvms/$?> for details.
 
 Also see L<Error Indicators>.
 
@@ -560,10 +627,10 @@ Also see L<Error Indicators>.
 
 =item $@
 
-The Perl syntax error message from the last eval() operator.  If null, 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"?)
+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"?)
 
 Warning messages are not collected in this variable.  You can,
 however, set up a routine to process warnings by setting C<$SIG{__WARN__}>
@@ -588,7 +655,8 @@ across fork() calls.  (Mnemonic: same as shells.)
 =item $<
 
 The real uid of this process.  (Mnemonic: it's the uid you came I<from>,
-if you're running setuid.)
+if you're running setuid.)  You can change both the real uid and
+the effective uid at the same time by using POSIX::setuid().
 
 =item $EFFECTIVE_USER_ID
 
@@ -601,8 +669,11 @@ The effective uid of this process.  Example:
     $< = $>;           # set real to effective uid
     ($<,$>) = ($>,$<); # swap real and effective uid
 
+You can change both the effective uid and the real uid at the same
+time by using POSIX::setuid().
+
 (Mnemonic: it's the uid you went I<to>, if you're running setuid.)
-C<$E<lt>> and C<$E<gt>> can be swapped only on machines
+C<< $< >> and C<< $> >> can be swapped only on machines
 supporting setreuid().
 
 =item $REAL_GROUP_ID
@@ -621,6 +692,9 @@ 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.
 
+You can change both the real gid and the effective gid at the same
+time by using POSIX::setgid().
+
 (Mnemonic: parentheses are used to I<group> things.  The real gid is the
 group you I<left>, if you're running setgid.)
 
@@ -643,10 +717,13 @@ 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" >.
 
+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).
+
 (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.)
 
-C<$E<lt>>, C<$E<gt>>, C<$(> and C<$)> can be set only on
+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().
 
@@ -660,6 +737,11 @@ program sees.  This 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>.)
 
+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"> will
+result in C<"perl: foobar (perl)">.  This is an operating system
+feature.
+
 =item $[
 
 The index of the first element in an array, and of the first character
@@ -672,8 +754,6 @@ As of release 5 of Perl, assignment to C<$[> is treated as a compiler
 directive, and cannot influence the behavior of any other file.
 Its use is highly discouraged.
 
-=item $PERL_VERSION
-
 =item $]
 
 The version + patchlevel / 1000 of the Perl interpreter.  This variable
@@ -686,7 +766,10 @@ of perl in the right bracket?)  Example:
 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.
 
-See C<$^V> for a more modern representation of the Perl version.
+The use of this variable is deprecated.  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.
 
 =item $COMPILING
 
@@ -715,7 +798,8 @@ 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 open() or pipe() was called, not the time of the exec().
+C<$^F> when the corresponding file, pipe, or socket was opened, not the
+time of the exec().
 
 =item $^H
 
@@ -785,10 +869,10 @@ Then
 
     $^M = 'a' x (1 << 16);
 
-would allocate a 64K buffer for use when in emergency.  See the
+would allocate a 64K buffer for use in an emergency.  See the
 F<INSTALL> file in the Perl distribution for information on how to
 enable this option.  To discourage casual use of this advanced
-feature, there is no L<English> long name for this variable.
+feature, there is no L<English|English> long name for this variable.
 
 =item $OSNAME
 
@@ -854,11 +938,15 @@ were compiled.
 Some bits may be relevant at compile-time only, some at
 run-time only.  This is a new mechanism and the details may change.
 
+=item $LAST_REGEXP_CODE_RESULT
+
 =item $^R
 
 The result of evaluation of the last successful C<(?{ code })>
 regular expression assertion (see L<perlre>).  May be written to.
 
+=item $EXCEPTIONS_BEING_CAUGHT
+
 =item $^S
 
 Current state of the interpreter.  Undefined if parsing of the current
@@ -873,24 +961,23 @@ The time at which the program began running, in seconds since the
 epoch (beginning of 1970).  The values returned by the B<-M>, B<-A>,
 and B<-C> filetests are based on this value.
 
-=item $PERL_VERSION_TUPLE
+=item $PERL_VERSION
 
 =item $^V
 
 The revision, version, and subversion of the Perl interpreter, represented
-as a "version tuple".  Version tuples have both a numeric value and a
-string value.  The numeric value is a floating point number that amounts
-to revision + version/1000 + subversion/1000000, and the string value
-is made of characters possibly in the UTF-8 range:
-C<chr($revision) . chr($version) . chr($subversion)>.
+as a string composed of characters with those ordinals.  Thus in Perl v5.6.0
+it equals C<chr(5) . chr(6) . chr(0)> and will return true for
+C<$^V eq v5.6.0>.  Note that the characters in this string value can
+potentially be in Unicode range.
 
 This 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:
+Control.)  Example:
 
-    warn "No "our" declarations!\n" if $^V and $^V lt v5.6;
+    warn "No \"our\" declarations!\n" if $^V and $^V lt v5.6.0;
 
-See also the documentation of C<use VERSION> and C<require VERSION>
+See the documentation of C<use VERSION> and C<require VERSION>
 for a convenient way to fail if the running Perl interpreter is too old.
 
 See also C<$]> for an older representation of the Perl version.
@@ -920,8 +1007,8 @@ The initial value is typically C<0> for compatibility with Perl versions
 earlier than 5.6, but may be automatically set to C<1> by Perl if the system
 provides a user-settable default (e.g., C<$ENV{LC_CTYPE}>).
 
-The C<byte> pragma always overrides the effect of this flag in the current
-lexical scope.  See L<byte>.
+The C<bytes> pragma always overrides the effect of this flag in the current
+lexical scope.  See L<bytes>.
 
 =item $EXECUTABLE_NAME
 
@@ -932,7 +1019,7 @@ This may not be a full pathname, nor even necessarily in your path.
 
 =item $ARGV
 
-contains the name of the current file when reading from E<lt>E<gt>.
+contains the name of the current file when reading from <>.
 
 =item @ARGV
 
@@ -941,6 +1028,13 @@ 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 @F
+
+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'>.
+
 =item @INC
 
 The array @INC contains the list of places that the C<do EXPR>,
@@ -1102,7 +1196,7 @@ the value of $@ is the compile error, or the argument to C<die>
 (which will interpolate C<$!> and C<$?>!).  (See also L<Fatal>,
 though.)
 
-When the eval() expression above is executed, open(), C<<PIPEE<gt>>,
+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. 
@@ -1179,7 +1273,7 @@ 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.perl.com/CPAN/modules/by-module/Devel/Devel-SawAmpersand-0.10.readme)
+(http://www.perl.com/CPAN/modules/by-module/Devel/)
 for more information.
 
 Having to even think about the C<$^S> variable in your exception