transient information about idiosyncrasies of some of the ports, almost
all of which are in a state of constant evolution. Thus, this material
should be considered a perpetual work in progress
-(<IMG SRC="yellow_sign.gif" ALT="Under Construction">).
+(C<< <IMG SRC="yellow_sign.gif" ALT="Under Construction"> >>).
=head1 ISSUES
#...
}
-You can get away with this on Unix and MacOS (they have a single
+You can get away with this on Unix and Mac OS (they have a single
character end-of-line), but the same program will break under DOSish
perls because you're only chop()ing half the end-of-line. Instead,
chomp() should be used to trim newlines. The Dunce::Files module can
Some of this may be confusing. Here's a handy reference to the ASCII CR
and LF characters. You can print it out and stick it in your wallet.
- LF == \012 == \x0A == \cJ == ASCII 10
- CR == \015 == \x0D == \cM == ASCII 13
+ LF eq \012 eq \x0A eq \cJ eq chr(10) eq ASCII 10
+ CR eq \015 eq \x0D eq \cM eq chr(13) eq ASCII 13
| Unix | DOS | Mac |
---------------------------
"\n", and "\n" on output becomes CRLF.
These are just the most common definitions of C<\n> and C<\r> in Perl.
-There may well be others.
+There may well be others. For example, on an EBCDIC implementation such
+as z/OS or OS/400 the above material is similar to "Unix" but the code
+numbers change:
+
+ LF eq \025 eq \x15 eq chr(21) eq CP-1047 21
+ LF eq \045 eq \x25 eq \cU eq chr(37) eq CP-0037 37
+ CR eq \015 eq \x0D eq \cM eq chr(13) eq CP-1047 13
+ CR eq \015 eq \x0D eq \cM eq chr(13) eq CP-0037 13
+
+ | z/OS | OS/400 |
+ ----------------------
+ \n | LF | LF |
+ \r | CR | CR |
+ \n * | LF | LF |
+ \r * | CR | CR |
+ ----------------------
+ * text-mode STDIO
=head2 Numbers endianness and Width
modification timestamp), or one second granularity of any timestamps
(e.g. the FAT filesystem limits the time granularity to two seconds).
-The "inode change timestamp" (the <-C> filetest) may really be the
+The "inode change timestamp" (the C<-C> filetest) may really be the
"creation timestamp" (which it is not in UNIX).
VOS perl can emulate Unix filenames with C</> as path separator. The
where it is undesirable.
Don't use C<:> as a part of a filename since many systems use that for
-their own semantics (MacOS Classic for separating pathname components,
+their own semantics (Mac OS Classic for separating pathname components,
many networking schemes and utilities for separating the nodename and
the pathname, and so on). For the same reasons, avoid C<@>, C<;> and
C<|>.
Don't count on specific values of C<$!>.
+=head2 Command names versus file pathnames
+
+Don't assume that the name used to invoke a command or program with
+C<system> or C<exec> can also be used to test for the existence of the
+file that holds the executable code for that command or program.
+First, many systems have "internal" commands that are built-in to the
+shell or OS and while these commands can be invoked, there is no
+corresponding file. Second, some operating systems (e.g., Cygwin,
+DJGPP, OS/2, and VOS) have required suffixes for executable files;
+these suffixes are generally permitted on the command name but are not
+required. Thus, a command like "perl" might exist in a file named
+"perl", "perl.exe", or "perl.pm", depending on the operating system.
+The variable "_exe" in the Config module holds the executable suffix,
+if any. Third, the VMS port carefully sets up $^X and
+$Config{perlpath} so that no further processing is required. This is
+just as well, because the matching regular expression used below would
+then have to deal with a possible trailing version number in the VMS
+file name.
+
+To convert $^X to a file pathname, taking account of the requirements
+of the various operating system possibilities, say:
+ use Config;
+ $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;
+ $thisperl = $Config{perlpath};
+ if ($^O ne 'VMS')
+ {$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
+
=head2 Interprocess Communication (IPC)
In general, don't directly access the system in code meant to be
print +('3.1','95','NT')[$os_version_info[4]],"\n";
}
+There are also Win32::IsWinNT() and Win32::IsWin95(), try C<perldoc Win32>,
+and as of libwin32 0.19 (not part of the core Perl distribution)
+Win32::GetOSName(). The very portable POSIX::uname() will work too:
+
+ c:\> perl -MPOSIX -we "print join '|', uname"
+ Windows NT|moonru|5.0|Build 2195 (Service Pack 2)|x86
+
Also see:
=over 4
The EMX environment for DOS, OS/2, etc. emx@iaehv.nl,
http://www.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/index.html or
-ftp://hobbes.nmsu.edu/pub/os2/dev/emx. Also L<perlos2>.
+ftp://hobbes.nmsu.edu/pub/os2/dev/emx/ Also L<perlos2>.
=item *
(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
+ C<< $ perl -ne "print if /perl_setup/i" >system>notices >>
+ C<< $ perl -ne "print if /perl_setup/i" /system/notices >>
or even a mixture of both as in:
- $ perl -ne "print if /perl_setup/i" >system/notices
+ C<< $ 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
renamed before they can be processed by Perl. Note that VOS limits
file names to 32 or fewer characters.
-See F<README.vos> for restrictions that apply when Perl is built
-with the alpha version of VOS POSIX.1 support.
-
-Perl on VOS is built without any extensions and does not support
-dynamic loading.
+Perl on VOS can be built using two different compilers and two different
+versions of the POSIX runtime. The recommended method for building full
+Perl is with the GNU C compiler and the generally-available version of
+VOS POSIX support. See F<README.vos> (installed as L<perlvos>) for
+restrictions that apply when Perl is built using the VOS Standard C
+compiler or the alpha version of VOS POSIX support.
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
=item *
-F<README.vos>
+F<README.vos> (installed as L<perlvos>)
=item *
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
+Stratus mailing list. Send a letter with "subscribe Info-Stratus" in
the message body to majordomo@list.stratagy.com.
=item *
-VOS Perl on the web at http://ftp.stratus.com/pub/vos/vos.html
+VOS Perl on the web at http://ftp.stratus.com/pub/vos/posix/posix.html
=back
OS $^O $Config{'archname'}
------------------------------------------
Amiga DOS amigaos m68k-amigos
+ BeOS beos
MPE/iX mpeix PA-RISC1.1
See also:
=item *
-Plan 9, F<README.plan9>
+S<Plan 9>, F<README.plan9>
=back
=item chown LIST
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>, VOS)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>, VOS)
Does nothing, but won't fail. (Win32)
=item chroot
-Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS, VM/ESA)
+Not implemented. (S<Mac OS>, Win32, VMS, S<Plan 9>, S<RISC OS>, VOS, VM/ESA)
=item crypt PLAINTEXT,SALT
=item dbmclose HASH
-Not implemented. (VMS, Plan9, VOS)
+Not implemented. (VMS, S<Plan 9>, VOS)
=item dbmopen HASH,DBNAME,MODE
-Not implemented. (VMS, Plan9, VOS)
+Not implemented. (VMS, S<Plan 9>, VOS)
=item dump LABEL
=item getnetbyname NAME
-Not implemented. (S<Mac OS>, Win32, Plan9)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
=item getpwuid UID
=item getnetbyaddr ADDR,ADDRTYPE
-Not implemented. (S<Mac OS>, Win32, Plan9)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
=item getprotobynumber NUMBER
=item getnetent
-Not implemented. (S<Mac OS>, Win32, Plan9)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
=item getprotoent
-Not implemented. (S<Mac OS>, Win32, Plan9)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
=item getservent
-Not implemented. (Win32, Plan9)
-
-=item setpwent
-
-Not implemented. (S<Mac OS>, Win32, S<RISC OS>)
-
-=item setgrent
-
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>)
+Not implemented. (Win32, S<Plan 9>)
=item sethostent STAYOPEN
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>)
=item setnetent STAYOPEN
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>)
=item setprotoent STAYOPEN
-Not implemented. (S<Mac OS>, Win32, Plan9, S<RISC OS>)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>, S<RISC OS>)
=item setservent STAYOPEN
-Not implemented. (Plan9, Win32, S<RISC OS>)
+Not implemented. (S<Plan 9>, Win32, S<RISC OS>)
=item endpwent
=item endnetent
-Not implemented. (S<Mac OS>, Win32, Plan9)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
=item endprotoent
-Not implemented. (S<Mac OS>, Win32, Plan9)
+Not implemented. (S<Mac OS>, Win32, S<Plan 9>)
=item endservent
-Not implemented. (Plan9, Win32)
+Not implemented. (S<Plan 9>, Win32)
=item getsockopt SOCKET,LEVEL,OPTNAME
-Not implemented. (Plan9)
+Not implemented. (S<Plan 9>)
=item glob EXPR
=item msgrcv ID,VAR,SIZE,TYPE,FLAGS
-Not implemented. (S<Mac OS>, Win32, VMS, Plan9, S<RISC OS>, VOS)
+Not implemented. (S<Mac OS>, Win32, VMS, S<Plan 9>, S<RISC OS>, VOS)
=item open FILEHANDLE,EXPR
=item setgrent
-Not implemented. (MPE/iX, Win32)
+Not implemented. (S<Mac OS>, MPE/iX, VMS, Win32, VMS, S<RISC OS>)
=item setpgrp PID,PGRP
=item setpwent
-Not implemented. (MPE/iX, Win32)
+Not implemented. (S<Mac OS>, MPE/iX, Win32, S<RISC OS>)
=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
-Not implemented. (Plan9)
+Not implemented. (S<Plan 9>)
=item shmctl ID,CMD,ARG
would give you the number of the signal that terminated the program,
or that C<$? & 128> would test true if the program was terminated by a
coredump. Instead, use the POSIX W*() interfaces: for example, use
-WIFEXITED($?) an WEXITVALUE($?) to test for a normal exit and the exit
-value, and WIFSIGNALED($?) and WTERMSIG($?) for a signal exit and the
+WIFEXITED($?) and WEXITVALUE($?) to test for a normal exit and the exit
+value, WIFSIGNALED($?) and WTERMSIG($?) for a signal exit and the
signal. Core dumping is not a portable concept, so there's no portable
way to test for that.
=head1 Supported Platforms
-As of early 2001 (the Perl releases 5.6.1 and 5.7.1), the following
-platforms are able to build Perl from the standard source code
-distribution available at http://www.cpan.org/src/index.html
-
- AIX
- AmigaOS
- Darwin (Mac OS X)
- DG/UX
- DOS DJGPP 1)
- DYNIX/ptx
- EPOC
- FreeBSD
- HP-UX
- IRIX
- Linux
- MachTen
- MacOS Classic 2)
- NonStop-UX
- ReliantUNIX (SINIX)
- OpenBSD
- OpenVMS (VMS)
- OS/2
- OS X
- QNX
- Solaris
- Tru64 UNIX (DEC OSF/1, Digital UNIX)
- UNICOS
- UNICOS/mk
- VOS
- Win32/NT/2K 3)
+As of June 2002 (the Perl release 5.8.0), the following platforms are
+able to build Perl from the standard source code distribution
+available at http://www.cpan.org/src/index.html
+
+ AIX
+ BeOS
+ Cygwin
+ DG/UX
+ DOS DJGPP 1)
+ DYNIX/ptx
+ EPOC R5
+ FreeBSD
+ HP-UX
+ IRIX
+ Linux
+ Mac OS Classic
+ Mac OS X (Darwin)
+ MPE/iX
+ NetBSD
+ NetWare
+ NonStop-UX
+ ReliantUNIX (SINIX)
+ OpenBSD
+ OpenVMS (VMS)
+ OS/2
+ POSIX-BC (BS2000)
+ QNX
+ Solaris
+ SUPER-UX
+ Tru64 UNIX (DEC OSF/1, Digital UNIX)
+ UNICOS
+ UNICOS/mk
+ UTS
+ VOS
+ Win95/98/ME/2K/XP 2)
+ WinCE
+ z/OS (OS/390)
+ VM/ESA
1) in DOS mode either the DOS or OS/2 ports can be used
- 2) Mac OS Classic (pre-X) is almost 5.6.1-ready; building from
- the source does work with 5.6.1, but additional MacOS specific
- source code is needed for a complete build. See the web
- site http://dev.macperl.org/ for more information.
- 3) compilers: Borland, Cygwin, Mingw32 EGCS/GCC, VC++
-
-The following platforms worked for the previous releases (5.6.0 and 5.7.0),
-but we did not manage to test these in time for the 5.7.1 release.
-There is a very good chance that these will work fine with the 5.7.1.
-
- DomainOS
- Hurd
- LynxOS
- MinGW
- MPE/iX
- NetBSD
- PowerMAX
- SCO SV
- SunOS
- SVR4
- Unixware
- Windows 3.1
- Windows 95
- Windows 98
- Windows Me
-
-The following platform worked for the 5.005_03 major release but not
-for 5.6.0. Standardization on UTF-8 as the internal string
-representation in 5.6.0 and 5.6.1 introduced incompatibilities in this
-EBCDIC platform. While Perl 5.7.1 will build on this platform some
-regression tests may fail and the C<use utf8;> pragma typically
-introduces text handling errors.
-
- OS/390 1)
-
- 1) previously known as MVS, about to become z/OS.
-
-Strongly related to the OS/390 platform by also being EBCDIC-based
-mainframe platforms are the following platforms:
-
- POSIX-BC (BS2000)
- VM/ESA
-
-These are also expected to work, albeit with no UTF-8 support, under 5.6.1
-for the same reasons as OS/390. Contact the mailing list perl-mvs@perl.org
-for more details.
+ 2) compilers: Borland, MinGW (GCC), VC6
+
+The following platforms worked with the previous releases (5.6 and
+5.7), but we did not manage either to fix or to test these in time
+for the 5.8.0 release. There is a very good chance that many of these
+will work fine with the 5.8.0. The only one known for certain to be
+broken for 5.8.0 is the AmigaOS (for which 5.6.1 and 5.7.2 can be used)
+
+ AmigaOS
+ BSD/OS
+ DomainOS
+ Hurd
+ LynxOS
+ MachTen
+ PowerMAX
+ PowerUX
+ SCO SV
+ SunOS 4
+ SVR4
+ Unixware
+ Windows 3.1
The following platforms have been known to build Perl from source in
the past (5.005_03 and earlier), but we haven't been able to verify
though, so go ahead and try compiling them, and let perlbug@perl.org
of any trouble.
- 3b1
- A/UX
- BeOS
- BSD/OS
- ConvexOS
- CX/UX
- DC/OSx
- DDE SMES
- DOS EMX
- Dynix
- EP/IX
- ESIX
- FPS
- GENIX
- Greenhills
- ISC
- MachTen 68k
- MiNT
- MPC
- NEWS-OS
- NextSTEP
- OpenSTEP
- Opus
- Plan 9
- PowerUX
- RISC/os
- SCO ODT/OSR
- Stellar
- SVR2
- TI1500
- TitanOS
- Ultrix
- Unisys Dynix
- Unixware
- UTS
-
-Support for the following platform is planned for a future Perl release:
-
- Netware
+ 3b1
+ A/UX
+ ConvexOS
+ CX/UX
+ DC/OSx
+ DDE SMES
+ DOS EMX
+ Dynix
+ EP/IX
+ ESIX
+ FPS
+ GENIX
+ Greenhills
+ ISC
+ MachTen 68k
+ MiNT
+ MPC
+ NEWS-OS
+ NextSTEP
+ OpenSTEP
+ Opus
+ Plan 9
+ RISC/os
+ SCO ODT/OSR
+ Stellar
+ SVR2
+ TI1500
+ TitanOS
+ Ultrix
+ Unisys Dynix
The following platforms have their own source code distributions and
-binaries available via http://www.cpan.org/ports/index.html:
+binaries available via http://www.cpan.org/ports/
- Perl release
+ Perl release
- Netware 5.003_07
- OS/400 5.005_02
- Tandem Guardian 5.004
+ OS/400 5.005_02
+ Tandem Guardian 5.004
The following platforms have only binaries available via
http://www.cpan.org/ports/index.html :
- Perl release
+ Perl release
- Acorn RISCOS 5.005_02
- AOS 5.002
- LynxOS 5.004_02
+ Acorn RISCOS 5.005_02
+ AOS 5.002
+ LynxOS 5.004_02
Although we do suggest that you always build your own Perl from
the source code, both for maximal configurability and for security,
=head1 SEE ALSO
-L<perlaix>, L<perlapollo>, L<perlamiga>, L<perlbeos>, L<perlbs200>,
-L<perlce>, L<perlcygwin>, L<perldgux>, L<perldos>, L<perlepoc>, L<perlebcdic>,
-L<perlhurd>, L<perlhpux>, L<perlmachten>, L<perlmacos>, L<perlmint>,
-L<perlmpeix>, L<perlnetware>, L<perlos2>, L<perlos390>, L<perlplan9>,
-L<perlqnx>, L<perlsolaris>, L<perltru64>, L<perlunicode>,
-L<perlvmesa>, L<perlvms>, L<perlvos>, L<perlwin32>, and L<Win32>.
+L<perlaix>, L<perlamiga>, L<perlapollo>, 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<perlmachten>, L<perlmacos>, L<perlmint>, L<perlmpeix>,
+L<perlnetware>, L<perlos2>, L<perlos390>, L<perlplan9>, L<perlqnx>,
+L<perlsolaris>, L<perltru64>, L<perlunicode>, L<perlvmesa>,
+L<perlvms>, L<perlvos>, L<perlwin32>, and L<Win32>.
=head1 AUTHORS / CONTRIBUTORS