This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[DOC PATCH] was Re: things deprecated for removal in 5.12
[perl5.git] / pod / perlvar.pod
index 866d8d7..6e62a10 100644 (file)
@@ -58,14 +58,14 @@ 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 $!;
+    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 $!;
+    open my $fh, "<", "foo" or die $!;
     undef $/; # enable slurp mode
     my $content = <$fh>;
     close $fh;
@@ -81,7 +81,7 @@ inside some short C<{}> block, you should create one yourself. For
 example:
 
     my $content = '';
-    open my $fh, "foo" or die $!;
+    open my $fh, "<", "foo" or die $!;
     {
         local $/;
         $content = <$fh>;
@@ -148,18 +148,24 @@ don't use it:
 
 =item *
 
-Various unary functions, including functions like ord() and int(), as well
-as the all file tests (C<-f>, C<-d>) except for C<-t>, which defaults to
-STDIN.
+The following functions:
+
+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, 
+unlink, unpack.
 
 =item *
 
-Various list functions like print() and unlink().
+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///> when used
-without an C<=~> operator.
+The pattern matching operations C<m//>, C<s///> and C<tr///> (aka C<y///>)
+when used without an C<=~> operator.
 
 =item *
 
@@ -172,6 +178,10 @@ The implicit iterator variable in the grep() and map() functions.
 
 =item *
 
+The implicit variable of 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.
@@ -181,7 +191,7 @@ test.  Outside a C<while> test, this will not happen.
 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,
-declaring C<our $> restores the global C<$_> in the current scope.
+declaring C<our $_> restores the global C<$_> in the current scope.
 
 (Mnemonic: underline is understood in certain operations.)
 
@@ -228,6 +238,14 @@ performance penalty on all regular expression matches.  See L</BUGS>.
 
 See L</@-> for a replacement.
 
+=item ${^MATCH}
+X<${^MATCH}>
+
+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.
+
 =item $PREMATCH
 
 =item $`
@@ -243,6 +261,14 @@ performance penalty on all regular expression matches.  See L</BUGS>.
 
 See L</@-> for a replacement.
 
+=item ${^PREMATCH}
+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
+to return a defined value when the pattern was compiled or executed with
+the C</p> modifier.
+
 =item $POSTMATCH
 
 =item $'
@@ -264,6 +290,14 @@ performance penalty on all regular expression matches.  See L</BUGS>.
 
 See L</@-> for a replacement.
 
+=item ${^POSTMATCH}
+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.
+
 =item $LAST_PAREN_MATCH
 
 =item $+
@@ -278,6 +312,8 @@ matched. For example:
 (Mnemonic: be positive and forward looking.)
 This variable is read-only and dynamically scoped to the current BLOCK.
 
+=item $LAST_SUBMATCH_RESULT
+
 =item $^N
 X<$^N>
 
@@ -313,6 +349,29 @@ 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 %+
+X<%+>
+
+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.
+
 =item HANDLE->input_line_number(EXPR)
 
 =item $INPUT_LINE_NUMBER
@@ -322,7 +381,7 @@ examples given for the C<@-> variable.
 =item $.
 X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X<line number>
 
-Current line number for the last filehandle accessed. 
+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
@@ -384,7 +443,7 @@ 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 $!;
+    open my $fh, "<", $myfile or die $!;
     local $_ = <$fh>;
 
 will read a record of no more than 32768 bytes from FILE.  If you're
@@ -420,7 +479,8 @@ 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.  (Mnemonic: when you want your pipes to be piping hot.)
+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
 
@@ -568,6 +628,48 @@ After a match against some variable $var:
 
 =back
 
+=item %-
+X<%->
+
+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.
+
+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.
+
 =item HANDLE->format_name(EXPR)
 
 =item $FORMAT_NAME
@@ -675,8 +777,7 @@ X<$^ENCODING>
 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.  See L<encoding>
-for more details.
+manipulation of this variable is highly discouraged.
 
 =item $OS_ERROR
 
@@ -690,7 +791,7 @@ 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(FH, $filename)) {
+    if (open my $fh, "<", $filename) {
        # Here $! is meaningless.
        ...
     } else {
@@ -713,6 +814,10 @@ went bang?)
 
 Also see L<Error Indicators>.
 
+=item %OS_ERROR
+
+=item %ERRNO
+
 =item %!
 X<%!>
 
@@ -837,7 +942,9 @@ the same as the first number.
 
 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.
+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.
 
 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 $!
@@ -958,7 +1065,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 AUTOLOAD at compile
-time rather than normal, deferred loading.  See L<perlcc>.  Setting
+time rather than normal, deferred loading.  Setting
 C<$^C = 1> is similar to calling C<B::minus_c>.
 
 =item $DEBUGGING
@@ -1218,15 +1325,12 @@ switch); see L<perlrun> for more info on this.
 X<$^V> X<$PERL_VERSION>
 
 The revision, version, and subversion of the Perl interpreter, represented
-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.
+as a C<version> object.
 
 This variable first appeared in perl 5.6.0; earlier versions of perl will
-see an undefined value.
+see an undefined value. Before perl 5.10.0 $^V was represented as a v-string.
 
-This can be used to determine whether the Perl interpreter executing a
+$^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:
 
@@ -1420,7 +1524,7 @@ you subsequently fork() off.
 =item $SIG{expr}
 X<%SIG>
 
-The hash %SIG contains signal handlers for signals.  For example:
+The hash C<%SIG> contains signal handlers for signals.  For example:
 
     sub handler {      # 1st argument is signal name
        my($sig) = @_;
@@ -1459,24 +1563,29 @@ immediate (also known as "unsafe") to deferred, also known as
 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 __WARN__ hook causes the ordinary printing
-of warnings to STDERR to be suppressed.  You can use this to save warnings
+argument.  The presence of a C<__WARN__> hook causes the ordinary printing
+of warnings to C<STDERR> to be suppressed.  You can use this to save warnings
 in a variable, or turn warnings into fatal errors, like this:
 
     local $SIG{__WARN__} = sub { die $_[0] };
     eval $proggie;
 
+As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can
+disable warnings using the empty subroutine:
+
+    local $SIG{__WARN__} = sub {};
+
 The routine indicated by C<$SIG{__DIE__}> is called when a fatal exception
 is about to be thrown.  The error message is passed as the first
-argument.  When a __DIE__ hook routine returns, the exception
+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 die().
+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__>.
 
 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 CORE::GLOBAL::die().
+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.