X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/dd0cfdaa8f18412a5bea90a5dd33b46569dea1c5..ad4795e78e923065898354b946437030aaeca163:/pod/perlvms.pod diff --git a/pod/perlvms.pod b/pod/perlvms.pod index b8993d8..d88e6b1 100644 --- a/pod/perlvms.pod +++ b/pod/perlvms.pod @@ -206,12 +206,12 @@ check the appropriate DECC$ feature logical, or call a conversion routine to force it to that format. The feature logical name DECC$FILENAME_UNIX_REPORT modifies traditional -Perl behavior in the conversion of file specifications from UNIX to VMS +Perl behavior in the conversion of file specifications from Unix to VMS format in order to follow the extended character handling rules now expected by the CRTL. Specifically, when this feature is in effect, the -C<./.../> in a UNIX path is now translated to C<[.^.^.^.]> instead of +C<./.../> in a Unix path is now translated to C<[.^.^.^.]> instead of the traditional VMS C<[...]>. To be compatible with what MakeMaker -expects, if a VMS path cannot be translated to a UNIX path, it is +expects, if a VMS path cannot be translated to a Unix path, it is passed through unchanged, so C will return C<[...]>. The handling of extended characters is largely complete in the @@ -221,24 +221,24 @@ particular, at this writing PathTools has only partial support for directories containing some extended characters. There are several ambiguous cases where a conversion routine cannot -determine whether an input filename is in UNIX format or in VMS format, -since now both VMS and UNIX file specifications may have characters in +determine whether an input filename is in Unix format or in VMS format, +since now both VMS and Unix file specifications may have characters in them that could be mistaken for syntax delimiters of the other type. So some pathnames simply cannot be used in a mode that allows either type of pathname to be present. Perl will tend to assume that an ambiguous -filename is in UNIX format. +filename is in Unix format. Allowing "." as a version delimiter is simply incompatible with -determining whether a pathname is in VMS format or in UNIX format with +determining whether a pathname is in VMS format or in Unix format with extended file syntax. There is no way to know whether "perl-5.8.6" is a -UNIX "perl-5.8.6" or a VMS "perl-5.8;6" when passing it to unixify() or +Unix "perl-5.8.6" or a VMS "perl-5.8;6" when passing it to unixify() or vmsify(). The DECC$FILENAME_UNIX_REPORT logical name controls how Perl interprets filenames to the extent that Perl uses the CRTL internally for many purposes, and attempts to follow CRTL conventions for reporting filenames. The DECC$FILENAME_UNIX_ONLY feature differs in that it -expects all filenames passed to the C run-time to be already in UNIX +expects all filenames passed to the C run-time to be already in Unix format. This feature is not yet supported in Perl since Perl uses traditional OpenVMS file specifications internally and in the test harness, and it is not yet clear whether this mode will be useful or @@ -265,16 +265,16 @@ created by an older version of an archive utility or a build utility such as MMK or MMS may generate a filename in all upper case even on an ODS-5 volume. If this filename is later retrieved by a Perl script or module in a case preserving environment, that upper case name may not -match the mixed-case or lower-case expections of the Perl code. Your +match the mixed-case or lower-case exceptions of the Perl code. Your best bet is to follow an all-or-nothing approach to case preservation: either don't use it at all, or make sure your entire toolchain and application environment support and use it. OpenVMS Alpha v7.3-1 and later and all version of OpenVMS I64 support case sensitivity as a process setting (see C). Perl does not currently suppport case +/CASE_LOOKUP=SENSITIVE>). Perl does not currently support case sensitivity on VMS, but it may in the future, so Perl programs should -use the Ccase_tolerant> method to determine the state, and +use the C<< File::Spec->case_tolerant >> method to determine the state, and not the C<$^O> variable. =head2 Symbolic Links @@ -284,7 +284,7 @@ default supports symbolic links when the requisite support is available in the filesystem and CRTL (generally 64-bit OpenVMS v8.3 and later). There are a number of limitations and caveats to be aware of when working with symbolic links on VMS. Most notably, the target of a valid -symbolic link must be expressed as a UNIX-style path and it must exist +symbolic link must be expressed as a Unix-style path and it must exist on a volume visible from your POSIX root (see the C command in DCL help). For further details on symbolic link capabilities and requirements, see chapter 12 of the CRTL manual that ships with OpenVMS @@ -348,15 +348,14 @@ argument to the C operator (see below). In this case, Perl will wait for the subprocess to complete before continuing. The mailbox (MBX) that perl can create to communicate with a pipe -defaults to a buffer size of 512. The default buffer size is -adjustable via the logical name PERL_MBX_SIZE provided that the -value falls between 128 and the SYSGEN parameter MAXBUF inclusive. -For example, to double the MBX size from the default within -a Perl program, use C<$ENV{'PERL_MBX_SIZE'} = 1024;> and then -open and use pipe constructs. An alternative would be to issue -the command: +defaults to a buffer size of 8192 on 64-bit systems, 512 on VAX. The +default buffer size is adjustable via the logical name PERL_MBX_SIZE +provided that the value falls between 128 and the SYSGEN parameter +MAXBUF inclusive. For example, to set the mailbox size to 32767 use +C<$ENV{'PERL_MBX_SIZE'} = 32767;> and then open and use pipe constructs. +An alternative would be to issue the command: - $ Define PERL_MBX_SIZE 1024 + $ Define PERL_MBX_SIZE 32767 before running your wide record pipe program. A larger value may improve performance at the expense of the BYTLM UAF quota. @@ -388,7 +387,7 @@ lower case. $define DISPLAY "hostname:0.0" Currently the value of C is ignored. It is recommended that it be set -to be the hostname of the display, the server and screen in UNIX notation. In +to be the hostname of the display, the server and screen in Unix notation. In the future the value of DISPLAY may be honored by Perl instead of using the default display. @@ -410,7 +409,7 @@ internal Perl problems that would cause such a condition. This allows the programmer to look at the execution stack and variables to find out the cause of the exception. As the debugger is being invoked as the Perl interpreter is about to do a fatal exit, continuing the execution -in debug mode is usally not practical. +in debug mode is usually not practical. Starting Perl in the VMS debugger may change the program execution profile in a way that such problems are not reproduced. @@ -678,37 +677,33 @@ if neither of the $! or $? status values are ones that would cause the native status to be interpreted as being what VMS classifies as SEVERE_ERROR severity for DCL error handling. -When the future POSIX_EXIT mode is active, C, the native VMS exit +When C is active (see L below), the native VMS exit status value will have either one of the C<$!> or C<$?> or C<$^E> or -the UNIX value 255 encoded into it in a way that the effective original +the Unix value 255 encoded into it in a way that the effective original value can be decoded by other programs written in C, including Perl and the GNV package. As per the normal non-VMS behavior of C if either C<$!> or C<$?> are non-zero, one of those values will be -encoded into a native VMS status value. If both of the UNIX status +encoded into a native VMS status value. If both of the Unix status values are 0, and the C<$^E> value is set one of ERROR or SEVERE_ERROR severity, then the C<$^E> value will be used as the exit code as is. -If none of the above apply, the UNIX value of 255 will be encoded into +If none of the above apply, the Unix value of 255 will be encoded into a native VMS exit status value. Please note a significant difference in the behavior of C in -the future POSIX_EXIT mode is that it does not force a VMS -SEVERE_ERROR status on exit. The UNIX exit values of 2 through +the C mode is that it does not force a VMS +SEVERE_ERROR status on exit. The Unix exit values of 2 through 255 will be encoded in VMS status values with severity levels of -SUCCESS. The UNIX exit value of 1 will be encoded in a VMS status +SUCCESS. The Unix exit value of 1 will be encoded in a VMS status value with a severity level of ERROR. This is to be compatible with how the VMS C library encodes these values. -The minimum severity level set by C in a future POSIX_EXIT mode -may be changed to be ERROR or higher before that mode becomes fully active -depending on the results of testing and further review. If this is -done, the behavior of c in the future POSIX_EXIT will close enough -to the default mode that most DCL shell scripts will probably not notice -a difference. +The minimum severity level set by C in C mode +may be changed to be ERROR or higher in the future depending on the +results of testing and further review. -See C<$?> for a description of the encoding of the UNIX value to +See L for a description of the encoding of the Unix value to produce a native VMS status containing it. - =item dump Rather than causing Perl to abort and dump core, the C @@ -775,7 +770,7 @@ true, a warning message is printed, and C is returned. =item kill In most cases, C is implemented via the undocumented system -service <$SIGPRC>, which has the same calling sequence as <$FORCEX>, but +service C<$SIGPRC>, which has the same calling sequence as C<$FORCEX>, but throws an exception in the target process rather than forcing it to call C<$EXIT>. Generally speaking, C follows the behavior of the CRTL's C function, but unlike that function can be called from @@ -852,10 +847,10 @@ Therefore, the "system time" elements will always be 0, since there is no difference between "user time" and "system" time under VMS, and the time accumulated by a subprocess may or may not appear separately in the "child time" field, depending on -whether L keeps track of subprocesses separately. Note +whether C keeps track of subprocesses separately. Note especially that the VAXCRTL (at least) keeps track only of -subprocesses spawned using L and L; it will not -accumulate the times of subprocesses spawned via pipes, L, +subprocesses spawned using C and C; it will not +accumulate the times of subprocesses spawned via pipes, C, or backticks. =item unlink LIST @@ -1114,38 +1109,38 @@ compiled with the _POSIX_EXIT macro set, the status value will contain the actual value of 0 to 255 returned by that program on a normal exit. -With the _POSIX_EXIT macro set, the UNIX exit value of zero is -represented as a VMS native status of 1, and the UNIX values +With the _POSIX_EXIT macro set, the Unix exit value of zero is +represented as a VMS native status of 1, and the Unix values from 2 to 255 are encoded by the equation: VMS_status = 0x35a000 + (unix_value * 8) + 1. -And in the special case of unix value 1 the encoding is: +And in the special case of Unix value 1 the encoding is: VMS_status = 0x35a000 + 8 + 2 + 0x10000000. For other termination statuses, the severity portion of the -subprocess' exit status is used: if the severity was success or +subprocess's exit status is used: if the severity was success or informational, these bits are all 0; 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 severe_error. Fatal is another term for the severe_error status. -As a result, C<$?> will always be zero if the subprocess' exit +As a result, C<$?> will always be zero if the subprocess's exit status indicated successful completion, and non-zero if a warning or error occurred or a program compliant with encoding _POSIX_EXIT values was run and set a status. How can you tell the difference between a non-zero status that is -the result of a VMS native error status or an encoded UNIX status? +the result of a VMS native error status or an encoded Unix status? You can not unless you look at the ${^CHILD_ERROR_NATIVE} value. The ${^CHILD_ERROR_NATIVE} value returns the actual VMS status value and check the severity bits. If the severity bits are equal to 1, then if the numeric value for C<$?> is between 2 and 255 or 0, then -C<$?> accurately reflects a value passed back from a UNIX application. +C<$?> accurately reflects a value passed back from a Unix application. If C<$?> is 1, and the severity bits indicate a VMS error (2), then -C<$?> is from a UNIX application exit value. +C<$?> is from a Unix application exit value. In practice, Perl scripts that call programs that return _POSIX_EXIT type status values will be expecting those values, and programs that @@ -1155,9 +1150,9 @@ behavior or just checking for a non-zero status. And success is always the value 0 in all behaviors. When the actual VMS termination status of the child is an error, -internally the C<$!> value will be set to the closest UNIX errno +internally the C<$!> value will be set to the closest Unix errno value to that error so that Perl scripts that test for error -messages will see the expected UNIX style error message instead +messages will see the expected Unix style error message instead of a VMS message. Conversely, when setting C<$?> in an END block, an attempt is made @@ -1167,17 +1162,17 @@ 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. -With the future POSIX_EXIT mode set, setting C<$?> will cause the -new value to also be encoded into C<$^E> so that the either the -original parent or child exit status values of 0 to 255 -can be automatically recovered by C programs expecting _POSIX_EXIT -behavior. If both a parent and a child exit value are non-zero, then it -will be assumed that this is actually a VMS native status value to -be passed through. The special value of 0xFFFF is almost a NOOP as -it will cause the current native VMS status in the C library to -become the current native Perl VMS status, and is handled this way -as consequence of it known to not be a valid native VMS status value. -It is recommend that only values in range of normal UNIX parent or +With the C logical name defined as "ENABLE", +setting C<$?> will cause the new value to be encoded into C<$^E> +so that either the original parent or child exit status values + 0 to 255 can be automatically recovered by C programs expecting +_POSIX_EXIT behavior. If both a parent and a child exit value are +non-zero, then it will be assumed that this is actually a VMS native +status value to be passed through. The special value of 0xFFFF is +almost a NOOP as it will cause the current native VMS status in the +C library to become the current native Perl VMS status, and is handled +this way as it is known to not be a valid native VMS status value. +It is recommend that only values in the range of normal Unix parent or child status numbers, 0 to 255 are used. The pragma C makes C<$?> reflect the actual @@ -1186,10 +1181,18 @@ 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). -Do not use the pragma C with the future -POSIX_EXIT mode, as they are at times requesting conflicting -actions and the consequence of ignoring this advice will be -undefined to allow future improvements in the POSIX exit handling. +Do not use the pragma C with C +enabled, as they are at times requesting conflicting actions and the +consequence of ignoring this advice will be undefined to allow future +improvements in the POSIX exit handling. + +In general, with C enabled, more detailed information +will be available in the exit status for DCL scripts or other native VMS tools, +and will give the expected information for Posix programs. It has not been +made the default in order to preserve backward compatibility. + +N.B. Setting C implicitly enables +C. =item $| @@ -1212,8 +1215,7 @@ problems. =head1 Revision date -This document was last updated on 3-Dec-2007, for Perl 5, -patchlevel 10. +Please see the git repository for revision history. =head1 AUTHOR