pod tweak suggested by Ilya
[p5sagit/p5-mst-13.2.git] / pod / perlvar.pod
index 2cb95af..2ed3e97 100644 (file)
@@ -6,15 +6,15 @@ perlvar - Perl predefined variables
 
 =head2 Predefined Names
 
-The following names have special meaning to Perl.  Most of the
+The following names have special meaning to Perl.  Most 
 punctuation names have reasonable mnemonics, or analogues in one of
-the shells.  Nevertheless, if you wish to use the long variable names,
+the shells.  Nevertheless, if you wish to use long variable names,
 you just need to say
 
     use English;
 
 at the top of your program.  This will alias all the short names to the
-long names in the current package.  Some of them even have medium names,
+long names in the current package.  Some even have medium names,
 generally borrowed from B<awk>.
 
 To go a step further, those variables that depend on the currently
@@ -28,7 +28,7 @@ after which you may use either
 
     method HANDLE EXPR
 
-or
+or more safely,
 
     HANDLE->method(EXPR)
 
@@ -112,11 +112,11 @@ test.  Note that outside of a C<while> test, this will not happen.
 
 =over 8
 
-=item $E<lt>I<digit>E<gt>
+=item $E<lt>I<digits>E<gt>
 
 Contains the subpattern from the corresponding set of parentheses in
 the last pattern matched, not counting patterns matched in nested
-blocks that have been exited already.  (Mnemonic: like \digit.)
+blocks that have been exited already.  (Mnemonic: like \digits.)
 These variables are all read-only.
 
 =item $MATCH
@@ -176,7 +176,8 @@ is 0.  (Mnemonic: * matches multiple things.)  Note that 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 perls.
+Use of "C<$*>" is deprecated in modern Perls, supplanted by 
+the C</s> and C</m> modifiers on pattern matching.
 
 =item input_line_number HANDLE EXPR
 
@@ -222,6 +223,27 @@ character belongs to the next paragraph, even if it's a newline.
 Remember: the value of $/ is a string, not a regexp.  AWK has to be
 better for something :-)
 
+Setting $/ to a reference to an integer, scalar containing an integer, or
+scalar that's convertable to an integer will attempt to read records
+instead of lines, with the maximum record size being the referenced
+integer. So this:
+
+    $/ = \32768; # or \"32768", or \$var_containing_32768
+    open(FILE, $myfile);
+    $_ = <FILE>;
+
+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.
+
+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
+likely not a problem, as any file you'd want to read in record mode is
+proably usable in line mode) Non-VMS systems perform normal I/O, so
+it's safe to mix record and non-record reads of a file.
+
 =item autoflush HANDLE EXPR
 
 =item $OUTPUT_AUTOFLUSH
@@ -406,12 +428,11 @@ L<perlfunc/formline()>.
 =item $?
 
 The status returned by the last pipe close, backtick (C<``>) command,
-or system() operator.  Note that this is the 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 actually (C<$? E<gt>E<gt> 8>), and
-C<$? & 255> gives which signal, if any, the process died from, and
-whether there was a core dump.  (Mnemonic: similar to B<sh> and
-B<ksh>.)
+or system() operator.  Note that this is the 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 actually (C<$? E<gt>E<gt> 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>.)
 
 Additionally, if the C<h_errno> variable is supported in C, its value
 is returned via $? if any of the C<gethost*()> functions fail.
@@ -427,6 +448,8 @@ Under VMS, the pragma C<use vmsish 'status'> makes C<$?> reflect the
 actual VMS exit status, instead of the default emulation of POSIX
 status.
 
+Also see L<Error Indicators>.
+
 =item $OS_ERROR
 
 =item $ERRNO
@@ -442,6 +465,8 @@ 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?)
 
+Also see L<Error Indicators>.
+
 =item $EXTENDED_OS_ERROR
 
 =item $^E
@@ -469,6 +494,8 @@ via C<$!>.
 Caveats mentioned in the description of C<$!> generally apply to
 C<$^E>, also.  (Mnemonic: Extra error explanation.)
 
+Also see L<Error Indicators>.
+
 =item $EVAL_ERROR
 
 =item $@
@@ -482,6 +509,8 @@ Note that 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.
 
+Also see L<Error Indicators>.
+
 =item $PROCESS_ID
 
 =item $PID
@@ -688,6 +717,12 @@ Start with single-step on.
 Note that some bits may be relevent at compile-time only, some at
 run-time only. This is a new mechanism and the details may change.
 
+=item $^R
+
+The result of evaluation of the last successful L<perlre/C<(?{ code })>> 
+regular expression assertion.  (Excluding those used as switches.)  May
+be written to.
+
 =item $^S
 
 Current state of the interpreter.  Undefined if parsing of the current
@@ -848,3 +883,54 @@ See L<perlfunc/die>, L<perlfunc/warn> and L<perlfunc/eval> for
 additional info.
 
 =back
+
+=head2 Error Indicators
+
+The variables L<$@>, L<$!>, L<$^E>, and L<$?> contain information about
+different types of error conditions that may appear during execution of
+Perl script.  The variables are shown ordered by the "distance" between
+the subsystem which reported the error and the Perl process, and
+correspond to errors detected by the Perl interpreter, C library,
+operating system, or an external program, respectively.
+
+To illustrate the differences between these variables, consider the 
+following Perl expression:
+
+   eval '
+        open PIPE, "/cdrom/install |";
+         @res = <PIPE>;
+        close PIPE or die "bad pipe: $?, $!";
+       ';
+
+After execution of this statement all 4 variables may have been set.  
+
+$@ 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 (either implicitly, say, 
+if C<open> was imported from module L<Fatal>, or the C<die> after 
+C<close> was triggered).  In these cases the value of $@ is the compile 
+error, or C<Fatal> error (which will interpolate C<$!>!), or the argument
+to C<die> (which will interpolate C<$!> and C<$?>!).
+
+When the above expression is executed, open(), C<<PIPEE<gt>>, and C<close> 
+are translated to C run-time library calls.  $! is set if one of these 
+calls fails.  The value is a symbolic indicator chosen by the C run-time 
+library, say C<No such file or directory>.
+
+On some systems the above C library calls are further translated 
+to calls to the kernel.  The kernel may have set more verbose error 
+indicator that one of the handful of standard C errors.  In such cases $^E 
+contains this verbose error indicator, which may be, say, C<CDROM tray not
+closed>.  On systems where C library calls are identical to system calls
+$^E is a duplicate of $!.
+
+Finally, $? may be set to non-C<0> value if the external program 
+C</cdrom/install> fails.  Upper bits of the particular value may reflect 
+specific error conditions encountered by this program (this is 
+program-dependent), lower-bits reflect mode of failure (segfault, completion,
+etc.).  Note that in contrast to $@, $!, and $^E, which are set only 
+if error condition is detected, the variable $? is set on each C<wait> or
+pipe C<close>, overwriting the old value.
+
+For more details, see the individual descriptions at L<$@>, L<$!>, L<$^E>,
+and L<$?>.