VMS the C<%ENV> table is much more than a per-process key-value string
table.
+On VMS, some entries in the %ENV hash are dynamically created when
+their key is used on a read if they did not previously exist. The
+values for C<$ENV{HOME}>, C<$ENV{TERM}>, C<$ENV{HOME}>, and C<$ENV{USER}>,
+are known to be dynamically generated. The specific names that are
+dynamically generated may vary with the version of the C library on VMS,
+and more may exist than is documented.
+
+On VMS by default, changes to the %ENV hash are persistent after the process
+exits. This can cause unintended issues.
+
Don't count on signals or C<%SIG> for anything.
Don't count on filename globbing. Use C<opendir>, C<readdir>, and
some large number. C<$offset> can then be added to a Unix time value
to get what should be the proper value on any system.
-On Windows (at least), you shouldn't pass a negative value to C<gmtime> or
-C<localtime>.
-
=head2 Character sets and character encoding
Assume very little about character sets.
later. If the bytes are native 8-bit bytes, you can use the C<bytes>
pragma. If the bytes are in a string (regular expression being a
curious string), you can often also use the C<\xHH> notation instead
-of embedding the bytes as-is. If they are in some particular legacy
-encoding (ether single-byte or something more complicated), you can
-use the C<encoding> pragma. (If you want to write your code in UTF-8,
-you can use either the C<utf8> pragma, or the C<encoding> pragma.)
-The C<bytes> and C<utf8> pragmata are available since Perl 5.6.0, and
-the C<encoding> pragma since Perl 5.8.0.
+of embedding the bytes as-is. (If you want to write your code in UTF-8,
+you can use the C<utf8>.) The C<bytes> and C<utf8> pragmata are
+available since Perl 5.6.0.
=head2 System Resources
dgux dgux AViiON-dgux
DYNIX/ptx dynixptx i386-dynixptx
FreeBSD freebsd freebsd-i386
+ Haiku haiku BePC-haiku
Linux linux arm-linux
Linux linux i386-linux
Linux linux i586-linux
delimiting character, VOS files, directories, or links whose names
contain a slash character cannot be processed. Such files must be
renamed before they can be processed by Perl. Note that VOS limits
-file names to 32 or fewer characters.
+file names to 32 or fewer characters, file names cannot start with a
+C<-> character, or contain any character matching C<< tr/ !%&'()*+;<>?// >>
The value of C<$^O> on VOS is "VOS". To determine the architecture that
you are running on without resorting to loading all of C<%Config> you
and applications are executable, and there are no uid/gid
considerations. C<-o> is not supported. (S<Mac OS>)
+C<-w> only inspects the read-only file attribute (FILE_ATTRIBUTE_READONLY),
+which determines whether the directory can be deleted, not whether it can
+be written to. Directories always have read and write access unless denied
+by discretionary access control lists (DACLs). (S<Win32>)
+
C<-r>, C<-w>, C<-x>, and C<-o> tell whether the file is accessible,
which may not reflect UIC-based file protections. (VMS)
C<-b>, C<-c>, C<-k>, C<-g>, C<-p>, C<-u>, C<-A> are not implemented.
(S<Mac OS>)
-C<-g>, C<-k>, C<-l>, C<-p>, C<-u>, C<-A> are not particularly meaningful.
+C<-g>, C<-k>, C<-l>, C<-u>, C<-A> are not particularly meaningful.
(Win32, VMS, S<RISC OS>)
+C<-p> is not particularly meaningful. (VMS, S<RISC OS>)
+
C<-d> is true if passed a device spec without an explicit directory.
(VMS)
=item gmtime
-Same portability caveats as L<localtime>.
+In theory, gmtime() is reliable from -2**63 to 2**63-1. However,
+because work arounds in the implementation use floating point numbers,
+it will become inaccurate as the time gets larger. This is a bug and
+will be fixed in the future.
=item ioctl FILEHANDLE,FUNCTION,SCALAR
$sig is 0 and the specified process exists, it returns true without
actually terminating it. (Win32)
+C<kill(-9, $pid)> will terminate the process specified by $pid and
+recursively all child processes owned by it. This is different from
+the Unix semantics, where the signal will be delivered to all
+processes in the same process group as the process specified by
+$pid. (Win32)
+
Is not supported for process identification number of 0 or negative
numbers. (VMS)
=item localtime
-Because Perl currently relies on the native standard C localtime()
-function, it is only safe to use times between 0 and (2**31)-1. Times
-outside this range may result in unexpected behavior depending on your
-operating system's implementation of localtime().
+localtime() has the same range as L<gmtime>, but because time zone
+rules change its accuracy for historical and future times may degrade
+but usually by no more than an hour.
=item lstat
=item socketpair
-Not implemented. (Win32, S<RISC OS>, VOS, VM/ESA)
+Not implemented. (S<RISC OS>, VOS, VM/ESA)
Available on 64 bit OpenVMS 8.2 and later. (VMS)
=item symlink
-Not implemented. (Win32, VMS, S<RISC OS>)
+Not implemented. (Win32, S<RISC OS>)
+
+Implemented on 64 bit VMS 8.3. VMS requires the symbolic link to be in Unix
+syntax if it is intended to resolve to a valid path.
=item syscall