connections use the C<pack> and C<unpack> formats C<n> and C<N>, the
"network" orders. These are guaranteed to be portable.
-As of perl 5.9.2, you can also use the C<E<gt>> and C<E<lt>> modifiers
+As of perl 5.10.0, you can also use the C<E<gt>> and C<E<lt>> modifiers
to force big- or little-endian byte-order. This is useful if you want
to store signed integers or 64-bit integers, for example.
One can circumnavigate both these problems in two ways. Either
transfer and store numbers always in text format, instead of raw
-binary, or else consider using modules like Data::Dumper (included in
-the standard distribution as of Perl 5.005) and Storable (included as
-of perl 5.8). Keeping all data as text significantly simplifies matters.
+binary, or else consider using modules like Data::Dumper and Storable
+(included as of perl 5.8). Keeping all data as text significantly
+simplifies matters.
The v-strings are portable only up to v2147483647 (0x7FFFFFFF), that's
how far EBCDIC, or more precisely UTF-EBCDIC will go.
To convert $^X to a file pathname, taking account of the requirements
of the various operating system possibilities, say:
- use Config;
- my $thisperl = $^X;
- if ($^O ne 'VMS')
- {$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
+ use Config;
+ my $thisperl = $^X;
+ if ($^O ne 'VMS')
+ {$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
To convert $Config{perlpath} to a file pathname, say:
- use Config;
- my $thisperl = $Config{perlpath};
- if ($^O ne 'VMS')
- {$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
+ use Config;
+ my $thisperl = $Config{perlpath};
+ if ($^O ne 'VMS')
+ {$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
=head2 Networking
Don't assume that the epoch starts at 00:00:00, January 1, 1970,
because that is OS- and implementation-specific. It is better to
store a date in an unambiguous representation. The ISO 8601 standard
-defines YYYY-MM-DD as the date format, or YYYY-MM-DDTHH-MM-SS
+defines YYYY-MM-DD as the date format, or YYYY-MM-DDTHH:MM:SS
(that's a literal "T" separating the date from the time).
-Please do use the ISO 8601 instead of making us to guess what
+Please do use the ISO 8601 instead of making us guess what
date 02/03/04 might be. ISO 8601 even sorts nicely as-is.
A text representation (like "1987-12-18") can be easily converted
into an OS-specific value using a module like Date::Parse.
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 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.
+of embedding the bytes as-is. If you want to write your code in UTF-8,
+you can use the C<utf8>.
=head2 System Resources
missing!) virtual memory systems then you want to be I<especially> mindful
of avoiding wasteful constructs such as:
- # NOTE: this is no longer "bad" in perl5.005
- for (0..10000000) {} # bad
- for (my $x = 0; $x <= 10000000; ++$x) {} # good
-
my @lines = <$very_large_file>; # bad
while (<$fh>) {$file .= $_} # sometimes bad
=item *
-Mailing list: cpan-testers@perl.org
+Mailing list: cpan-testers-discuss@perl.org
=item *
-Testing results: http://testers.cpan.org/
+Testing results: L<http://www.cpantesters.org/>
=back
=head1 PLATFORMS
-As of version 5.002, Perl is built with a C<$^O> variable that
-indicates the operating system it was built on. This was implemented
+Perl is built with a C<$^O> variable that indicates the operating
+system it was built on. This was implemented
to help speed up code that would otherwise have to C<use Config>
and use the value of C<$Config{osname}>. Of course, to get more
detailed information about the system, looking into C<%Config> is
Windows 2000 MSWin32 MSWin32-x86 2 5 00
Windows XP MSWin32 MSWin32-x86 2 5 01
Windows 2003 MSWin32 MSWin32-x86 2 5 02
+ Windows Vista MSWin32 MSWin32-x86 2 6 00
+ Windows 7 MSWin32 MSWin32-x86 2 6 01
+ Windows 7 MSWin32 MSWin32-x64 2 6 01
+ Windows 2008 MSWin32 MSWin32-x86 2 6 01
+ Windows 2008 MSWin32 MSWin32-x64 2 6 01
Windows CE MSWin32 ? 3
Cygwin cygwin cygwin
=item *
-The djgpp environment for DOS, http://www.delorie.com/djgpp/
+The djgpp environment for DOS, L<http://www.delorie.com/djgpp/>
and L<perldos>.
=item *
The EMX environment for DOS, OS/2, etc. emx@iaehv.nl,
-ftp://hobbes.nmsu.edu/pub/os2/dev/emx/ Also L<perlos2>.
+L<ftp://hobbes.nmsu.edu/pub/os2/dev/emx/> Also L<perlos2>.
=item *
=item *
-The ActiveState Pages, http://www.activestate.com/
+The ActiveState Pages, L<http://www.activestate.com/>
=item *
The Cygwin environment for Win32; F<README.cygwin> (installed
-as L<perlcygwin>), http://www.cygwin.com/
+as L<perlcygwin>), L<http://www.cygwin.com/>
=item *
The U/WIN environment for Win32,
-http://www.research.att.com/sw/tools/uwin/
+L<http://www.research.att.com/sw/tools/uwin/>
=item *
directory levels have snuck into the core by running the following in the
top-level source directory:
- $ perl -ne "$_=~s/\s+.*//; print if scalar(split /\//) > 8;" < MANIFEST
+ $ perl -ne "$_=~s/\s+.*//; print if scalar(split /\//) > 8;" < MANIFEST
The VMS::Filespec module, which gets installed as part of the build
=item *
-F<README.vms> (installed as L<README_vms>), L<perlvms>
+F<README.vms> (installed as F<README_vms>), L<perlvms>
=item *
=item *
-vmsperl on the web, http://www.sidhe.org/vmsperl/index.html
+vmsperl on the web, L<http://www.sidhe.org/vmsperl/index.html>
=back
=head2 VOS
-Perl on VOS is discussed in F<README.vos> in the perl distribution
-(installed as L<perlvos>). Perl on VOS can accept either VOS- or
-Unix-style file specifications as in either of the following:
+Perl on VOS (also known as OpenVOS) is discussed in F<README.vos>
+in the perl distribution (installed as L<perlvos>). Perl on VOS
+can accept either VOS- or Unix-style file specifications as in
+either of the following:
$ perl -ne "print if /perl_setup/i" >system>notices
$ perl -ne "print if /perl_setup/i" /system/notices
Even though VOS allows the slash character to appear in object
names, because the VOS port of Perl interprets it as a pathname
-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 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
-can examine the content of the @INC array like so:
+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.
+
+Older releases of VOS (prior to OpenVOS Release 17.0) limit file
+names to 32 or fewer characters, prohibit file names from
+starting with a C<-> character, and prohibit file names from
+containing any character matching C<< tr/ !#%&'()*;<=>?// >>.
+
+Newer releases of VOS (OpenVOS Release 17.0 or later) support a
+feature known as extended names. On these releases, file names
+can contain up to 255 characters, are prohibited from starting
+with a C<-> character, and the set of prohibited characters is
+reduced to any character matching C<< tr/#%*<>?// >>. There are
+restrictions involving spaces and apostrophes: these characters
+must not begin or end a name, nor can they immediately precede or
+follow a period. Additionally, a space must not immediately
+precede another space or hyphen. Specifically, the following
+character combinations are prohibited: space-space,
+space-hyphen, period-space, space-period, period-apostrophe,
+apostrophe-period, leading or trailing space, and leading or
+trailing apostrophe. Although an extended file name is limited
+to 255 characters, a path name is still limited to 256
+characters.
+
+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 can examine the content of the @INC array
+like so:
if ($^O =~ /VOS/) {
print "I'm on a Stratus box!\n";
The VOS mailing list.
There is no specific mailing list for Perl on VOS. You can post
-comments to the comp.sys.stratus newsgroup, or subscribe to the general
-Stratus mailing list. Send a letter with "subscribe Info-Stratus" in
-the message body to majordomo@list.stratagy.com.
+comments to the comp.sys.stratus newsgroup, or use the contact
+information located in the distribution files on the Stratus
+Anonymous FTP site.
=item *
-VOS Perl on the web at http://ftp.stratus.com/pub/vos/posix/posix.html
+VOS Perl on the web at L<http://ftp.stratus.com/pub/vos/posix/posix.html>
=back
services for OS/390" (formerly known as OpenEdition), VM/ESA OpenEdition, or
the BS200 POSIX-BC system (BS2000 is supported in perl 5.6 and greater).
See L<perlos390> for details. Note that for OS/400 there is also a port of
-Perl 5.8.1/5.9.0 or later to the PASE which is ASCII-based (as opposed to
+Perl 5.8.1/5.10.0 or later to the PASE which is ASCII-based (as opposed to
ILE which is EBCDIC-based), see L<perlos400>.
As of R2.5 of USS for OS/390 and Version 2.3 of VM/ESA these Unix
Some simple tricks for determining if you are running on an EBCDIC
platform could include any of the following (perhaps all):
- if ("\t" eq "\05") { print "EBCDIC may be spoken here!\n"; }
+ if ("\t" eq "\005") { print "EBCDIC may be spoken here!\n"; }
if (ord('A') == 193) { print "EBCDIC may be spoken here!\n"; }
=item *
AS/400 Perl information at
-http://as400.rochester.ibm.com/
+L<http://as400.rochester.ibm.com/>
as well as on CPAN in the F<ports/> directory.
=back
The Unix emulation library's translation of filenames to native assumes
that this sort of translation is required, and it allows a user-defined list
of known suffixes that it will transpose in this fashion. This may
-seem transparent, but consider that with these rules C<foo/bar/baz.h>
-and C<foo/bar/h/baz> both map to C<foo.bar.h.baz>, and that C<readdir> and
+seem transparent, but consider that with these rules F<foo/bar/baz.h>
+and F<foo/bar/h/baz> both map to F<foo.bar.h.baz>, and that C<readdir> and
C<glob> cannot and do not attempt to emulate the reverse mapping. Other
C<.>'s in filenames are translated to C</>.
=item *
HP 300 MPE/iX, F<README.mpeix> and Mark Bixby's web page
-http://www.bixby.org/mark/porting.html
+L<http://www.bixby.org/mark/porting.html>
=item *
A free perl5-based PERL.NLM for Novell Netware is available in
-precompiled binary and source code form from http://www.novell.com/
+precompiled binary and source code form from L<http://www.novell.com/>
as well as from CPAN.
=item *
C<-x> (or C<-X>) determine if a file has an executable file type.
(S<RISC OS>)
+=item alarm
+
+Emulated using timers that must be explicitly polled whenever Perl
+wants to dispatch "safe signals" and therefore cannot interrupt
+blocking system calls. (Win32)
+
=item atan2
Due to issues with various CPUs, math libraries, compilers, and standards,
Does not automatically flush output handles on some platforms.
(SunOS, Solaris, HP-UX)
+Not supported. (Symbian OS)
+
=item exit
Emulates Unix exit() (which considers C<exit 1> to indicate an error) by
the C library _POSIX_EXIT macro so that it can be decoded by other
programs, particularly ones written in C, like the GNV package. (VMS)
+C<exit()> resets file pointers, which is a problem when called
+from a child process (created by C<fork()>) in C<BEGIN>.
+A workaround is to use C<POSIX::_exit>. (Solaris)
+
+ exit unless $Config{archname} =~ /\bsolaris\b/;
+ require POSIX and POSIX::_exit(0);
+
=item fcntl
Not implemented. (Win32)
+
Some functions available based on the version of VMS. (VMS)
=item flock
Not implemented (VMS, S<RISC OS>, VOS).
-Available only on Windows NT (not on Windows 95). (Win32)
-
=item fork
Not implemented. (AmigaOS, S<RISC OS>, VM/ESA, VMS)
it will become inaccurate as the time gets larger. This is a bug and
will be fixed in the future.
+On VOS, time values are 32-bit quantities.
+
=item ioctl FILEHANDLE,FUNCTION,SCALAR
Not implemented. (VMS)
=item link
-Not implemented. (MPE/iX, S<RISC OS>)
+Not implemented. (MPE/iX, S<RISC OS>, VOS)
Link count not updated because hard links are not quite that hard
(They are sort of half-way between hard and soft links). (AmigaOS)
=item localtime
-localtime() has the same range as L<gmtime>, but because time zone
+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.
Can't move directories between directories on different logical volumes. (Win32)
+=item rewinddir
+
+Will not cause readdir() to re-read the directory stream. The entries
+already read before the rewinddir() call will just be returned again
+from a cache buffer. (Win32)
+
=item select
Only implemented on sockets. (Win32, VMS)
=item semop
-Not implemented. ( Win32, VMS, S<RISC OS>, VOS)
+Not implemented. (Win32, VMS, S<RISC OS>)
=item setgrent
-Not implemented. (MPE/iX, VMS, Win32, S<RISC OS>, VOS)
+Not implemented. (MPE/iX, VMS, Win32, S<RISC OS>)
=item setpgrp
=item setpwent
-Not implemented. (MPE/iX, Win32, S<RISC OS>, VOS)
+Not implemented. (MPE/iX, Win32, S<RISC OS>)
=item setsockopt
=item socketpair
-Not implemented. (S<RISC OS>, VOS, VM/ESA)
+Not implemented. (S<RISC OS>, VM/ESA)
+
+Available on OpenVOS Release 17.0 or later. (VOS)
Available on 64 bit OpenVMS 8.2 and later. (VMS)
=item umask
-Returns undef where unavailable, as of version 5.005.
+Returns undef where unavailable.
C<umask> works but the correct permissions are set only when the file
is finally closed. (AmigaOS)
The following platforms are known to build Perl 5.12 (as of April 2010,
its release date) from the standard source code distribution available
-at http://www.cpan.org/src
+at L<http://www.cpan.org/src>
=over
=item FreeBSD
+=item Debian GNU/kFreeBSD
+
=item Haiku
=item Irix (6.5. What else?)
=item Dragonfly BSD
+=item QNX Neutrino RTOS (6.5.0)
+
=item MirOS BSD
Caveats:
=back
-
=item Symbian (Series 60 v3, 3.2 and 5 - what else?)
-=item Stratus VOS
+=item Stratus VOS / OpenVOS
=item AIX
=back
-=head1 EOL Platforms (Perl 5.12)
+=head1 EOL Platforms (Perl 5.14)
The following platforms were supported by a previous version of
Perl but have been officially removed from Perl's source code
=back
-The following platforms may still work as of Perl 5.12, but Perl's
-developers have made an explicit decision to discontinue support for
-them:
+The following platforms were supported up to 5.10. They may still
+have worked in 5.12, but supporting code has been removed for 5.14:
=over
As of July 2002 (the Perl release 5.8.0), the following platforms were
able to build Perl from the standard source code distribution
-available at http://www.cpan.org/src/
+available at L<http://www.cpan.org/src/>
AIX
BeOS
Unisys Dynix
The following platforms have their own source code distributions and
-binaries available via http://www.cpan.org/ports/
+binaries available via L<http://www.cpan.org/ports/>
Perl release
Tandem Guardian 5.004
The following platforms have only binaries available via
-http://www.cpan.org/ports/index.html :
+L<http://www.cpan.org/ports/index.html> :
Perl release
Although we do suggest that you always build your own Perl from
the source code, both for maximal configurability and for security,
in case you are in a hurry you can check
-http://www.cpan.org/ports/index.html for binary distributions.
+L<http://www.cpan.org/ports/index.html> for binary distributions.
=head1 SEE ALSO
-L<perlaix>, L<perlamiga>, L<perlapollo>, L<perlbeos>, L<perlbs2000>,
+L<perlaix>, L<perlamiga>, L<perlbeos>, L<perlbs2000>,
L<perlce>, L<perlcygwin>, L<perldgux>, L<perldos>, L<perlepoc>,
L<perlebcdic>, L<perlfreebsd>, L<perlhurd>, L<perlhpux>, L<perlirix>,
L<perlmacos>, L<perlmacosx>, L<perlmpeix>,
Paul J. Schinder <schinder@pobox.com>,
Michael G Schwern <schwern@pobox.com>,
Dan Sugalski <dan@sidhe.org>,
-Nathan Torkington <gnat@frii.com>.
+Nathan Torkington <gnat@frii.com>,
John Malmberg <wb8tyw@qsl.net>