Not quite so relicy as thought in #11651 (op/concat #4 and #5
[p5sagit/p5-mst-13.2.git] / vms / perlvms.pod
index f43cbb0..080c03d 100644 (file)
@@ -17,7 +17,7 @@ subdirectory of the Perl distribution.
 We hope these notes will save you from confusion and lost 
 sleep when writing Perl scripts on VMS.  If you find we've 
 missed something you think should appear here, please don't 
-hesitate to drop a line to vmsperl@newman.upenn.edu.
+hesitate to drop a line to vmsperl@perl.org.
 
 =head1 Installation
 
@@ -486,7 +486,7 @@ process, so there is no opportunity to perform operations in
 the subprocess before calling C<exec>.
 
 In general, the use of C<fork> and C<exec> to create 
-subprocess is not recommended under VMS; wherever possible, 
+subprocesses is not recommended under VMS; wherever possible, 
 use the C<system> operator or piped filehandles instead.
 
 =item getpwent
@@ -575,10 +575,9 @@ B<SPAWN> at the DCL prompt.
 Perl waits for the subprocess to complete before continuing
 execution in the current process.  As described in L<perlfunc>,
 the return value of C<system> is a fake "status" which follows
-POSIX semantics; see the description of C<$?> in this document
-for more detail.  The actual VMS exit status of the subprocess
-is available in C<$^S> (as long as you haven't used another Perl
-function that resets C<$?> and C<$^S> in the meantime).
+POSIX semantics unless the pragma C<use vmsish 'status'> is in
+effect; see the description of C<$?> in this document for more 
+detail.  
 
 =item time
 
@@ -842,18 +841,26 @@ termination status of a process may or may not have been
 generated by an exception.  The next 8 bits are derived from
 the severity portion of the subprocess' exit status: if the
 severity was success or informational, these bits are all 0;
-otherwise, they contain the severity value shifted left one bit.
+if the severity was warning, they contain a value of 1; if the
+severity was error or fatal error, they contain the actual
+severity bits, which turns out to be a value of 2 for error
+and 4 for fatal error.  
+
 As a result, C<$?> will always be zero if the subprocess' exit
 status indicated successful completion, and non-zero if a
-warning or error occurred.  The actual VMS exit status may
-be found in C<$^S> (q.v.).
-
-=item $^S
-
-Under VMS, this is the 32-bit VMS status value returned by the
-last subprocess to complete.  Unlike C<$?>, no manipulation
-is done to make this look like a POSIX wait(5) value, so it
-may be treated as a normal VMS status value.
+warning or error occurred.  Conversely, when setting C<$?> in
+an END block, an attempt is made to convert the POSIX value
+into a native status intelligible to the operating system upon
+exiting Perl.  What this boils down to is that setting C<$?>
+to zero results in the generic success value SS$_NORMAL, and
+setting C<$?> to a non-zero value results in the generic
+failure status SS$_ABORT.  See also L<perlport/exit>.
+
+The pragma C<use vmsish 'status'> makes C<$?> reflect the actual 
+VMS exit status instead of the default emulation of POSIX status 
+described above.  This pragma also disables the conversion of
+non-zero values to SS$_ABORT when setting C<$?> in an END
+block (but zero will still be converted to SS$_NORMAL).
 
 =item $|
 
@@ -876,10 +883,11 @@ problems.
 
 =head1 Revision date
 
-This document was last updated on 26-Feb-2000, for Perl 5, 
-patchlevel 6.
+This document was last updated on 7-Aug-2001, for Perl 5, 
+patchlevel 8.
 
 =head1 AUTHOR
 
 Charles Bailey  <bailey@cor.newman.upenn.edu>
+Craig Berry  <craigberry@mac.com>
 Dan Sugalski  <dan@sidhe.org>