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<-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
native pathname characters greater-than, less-than, number-sign, and
percent-sign are always accepted.
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 assume that in pathnames you can collapse two leading slashes
+C<//> into one: some networking and clustering filesystems have special
+semantics for that. Let the operating system to sort it out.
+
The I<portable filename characters> as defined by ANSI C are
a b c d e f g h i j k l m n o p q r t u v w x y z
. _ -
and the "-" shouldn't be the first character. If you want to be
-hypercorrect, stay within the 8.3 naming convention (all the files and
-directories have to be unique within one directory if their names are
-lowercased and truncated to eight characters before the C<.>, if any,
-and to three characters after the C<.>, if any). (And do not use
-C<.>s in directory names.)
+hypercorrect, stay case-insensitive and within the 8.3 naming
+convention (all the files and directories have to be unique within one
+directory if their names are lowercased and truncated to eight
+characters before the C<.>, if any, and to three characters after the
+C<.>, if any). (And do not use C<.>s in directory names.)
=head2 System Interaction
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
--------------------------------------------
AIX aix aix
BSD/OS bsdos i386-bsdos
+ Darwin darwin darwin
dgux dgux AViiON-dgux
DYNIX/ptx dynixptx i386-dynixptx
FreeBSD freebsd freebsd-i386
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
Access permissions are mapped onto VOS access-control list changes. (VOS)
+The actual permissions set depend on the value of the C<CYGWIN>
+in the SYSTEM environment settings. (Cygwin)
+
=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
'not numeric' warnings.
mtime and atime are the same thing, and ctime is creation time instead of
-inode change time. (S<Mac OS>)
+inode change time. (S<Mac OS>).
+
+ctime not supported on UFS (S<Mac OS X>).
+
+ctime is creation time instead of inode change time (Win32).
device and inode are not meaningful. (Win32)
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
Larry Moore <ljmoore@freespace.net>,
Paul Moore <Paul.Moore@uk.origin-it.com>,
Chris Nandor <pudge@pobox.com>,
-Matthias Neeracher <neeri@iis.ee.ethz.ch>,
+Matthias Neeracher <neeracher@mac.com>,
Philip Newton <pne@cpan.org>,
Gary Ng <71564.1743@CompuServe.COM>,
Tom Phoenix <rootbeer@teleport.com>,
Dan Sugalski <dan@sidhe.org>,
Nathan Torkington <gnat@frii.com>.
-=head1 VERSION
-
-Version 1.50, last modified 10 Jul 2001