X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlport.pod;h=44c79de6f8bb00fe66c60b658e1a35b056feb5de;hb=8514a05ad77d06390899752b405c952ef7bae9d5;hp=df304154c1f60b71f46583e2e462afd2c6f7dd56;hpb=ec481373d406c683f1f4de379f9299a91d7a6b17;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlport.pod b/pod/perlport.pod index df30415..44c79de 100644 --- a/pod/perlport.pod +++ b/pod/perlport.pod @@ -75,7 +75,7 @@ This information should not be considered complete; it includes possibly 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 -(Under Construction). +(C<< Under Construction >>). =head1 ISSUES @@ -104,7 +104,7 @@ newlines: #... } -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 @@ -171,8 +171,8 @@ newline representation. A single line of code will often suffice: 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 | --------------------------- @@ -188,7 +188,23 @@ The Unix column assumes that you are not accessing a serial line "\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 @@ -232,6 +248,9 @@ 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. +The v-strings are portable only up to v2147483647 (0x7FFFFFFF), that's +how far EBCDIC, or more precisely UTF-EBCDIC will go. + =head2 Files and Filesystems Most platforms these days structure files in a hierarchical fashion. @@ -259,6 +278,9 @@ timestamp (meaning that about the only portable timestamp is the 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. @@ -332,25 +354,33 @@ first 8 characters. Whitespace in filenames is tolerated on most systems, but not all, and even on systems where it might be tolerated, some utilities -might becoem confused by such whitespace. +might become confused by such whitespace. Many systems (DOS, VMS) cannot have more than one C<.> in their filenames. Don't assume C<< > >> won't be the first character of a filename. -Always use C<< < >> explicitly to open a file for reading, -unless you want the user to be able to specify a pipe open. +Always use C<< < >> explicitly to open a file for reading, or even +better, use the three-arg version of open, unless you want the user to +be able to specify a pipe open. - open(FILE, "< $existing_file") or die $!; + open(FILE, '<', $existing_file) or die $!; If filenames might use strange characters, it is safest to open it with C instead of C. C is magic and can translate characters like C<< > >>, C<< < >>, and C<|>, which may be the wrong thing to do. (Sometimes, though, it's the right thing.) +Three-arg open can also help protect against this translation in cases +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). +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 as defined by ANSI C are @@ -359,7 +389,12 @@ The I as defined by ANSI C are 0 1 2 3 4 5 6 7 8 9 . _ - -and the "-" shouldn't be the first character. +and the "-" shouldn't be the first character. If you want to be +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 @@ -413,6 +448,38 @@ directories. 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 or C 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 @@ -661,6 +728,7 @@ are a few of the more popular Unix flavors: -------------------------------------------- AIX aix aix BSD/OS bsdos i386-bsdos + Darwin darwin darwin dgux dgux AViiON-dgux DYNIX/ptx dynixptx i386-dynixptx FreeBSD freebsd freebsd-i386 @@ -764,6 +832,13 @@ Win32::GetOSVersion(). For example: print +('3.1','95','NT')[$os_version_info[4]],"\n"; } +There are also Win32::IsWinNT() and Win32::IsWin95(), try C, +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 @@ -777,7 +852,7 @@ and L. 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. +ftp://hobbes.nmsu.edu/pub/os2/dev/emx/ Also L. =item * @@ -1004,12 +1079,12 @@ Perl on VOS is discussed in F in the perl distribution (installed as L). 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 @@ -1018,11 +1093,12 @@ 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. -See F 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 (installed as L) 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 @@ -1054,7 +1130,7 @@ Also see: =item * -F +F (installed as L) =item * @@ -1062,12 +1138,12 @@ 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 +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 @@ -1290,6 +1366,7 @@ in the "OTHER" category include: OS $^O $Config{'archname'} ------------------------------------------ Amiga DOS amigaos m68k-amigos + BeOS beos MPE/iX mpeix PA-RISC1.1 See also: @@ -1322,7 +1399,7 @@ as well as from CPAN. =item * -Plan 9, F +S, F =back @@ -1420,9 +1497,12 @@ Only good for changing "owner" and "other" read-write access. (S) Access permissions are mapped onto VOS access-control list changes. (VOS) +The actual permissions set depend on the value of the C +in the SYSTEM environment settings. (Cygwin) + =item chown LIST -Not implemented. (S, Win32, Plan9, S, VOS) +Not implemented. (S, Win32, S, S, VOS) Does nothing, but won't fail. (Win32) @@ -1430,7 +1510,7 @@ Does nothing, but won't fail. (Win32) =item chroot -Not implemented. (S, Win32, VMS, Plan9, S, VOS, VM/ESA) +Not implemented. (S, Win32, VMS, S, S, VOS, VM/ESA) =item crypt PLAINTEXT,SALT @@ -1441,11 +1521,11 @@ Not implemented. (VOS) =item dbmclose HASH -Not implemented. (VMS, Plan9, VOS) +Not implemented. (VMS, S, VOS) =item dbmopen HASH,DBNAME,MODE -Not implemented. (VMS, Plan9, VOS) +Not implemented. (VMS, S, VOS) =item dump LABEL @@ -1522,7 +1602,7 @@ Not implemented. (S, Win32, VMS, S) =item getnetbyname NAME -Not implemented. (S, Win32, Plan9) +Not implemented. (S, Win32, S) =item getpwuid UID @@ -1536,7 +1616,7 @@ Not implemented. (S, Win32, VMS, S) =item getnetbyaddr ADDR,ADDRTYPE -Not implemented. (S, Win32, Plan9) +Not implemented. (S, Win32, S) =item getprotobynumber NUMBER @@ -1560,39 +1640,31 @@ Not implemented. (S, Win32) =item getnetent -Not implemented. (S, Win32, Plan9) +Not implemented. (S, Win32, S) =item getprotoent -Not implemented. (S, Win32, Plan9) +Not implemented. (S, Win32, S) =item getservent -Not implemented. (Win32, Plan9) - -=item setpwent - -Not implemented. (S, Win32, S) - -=item setgrent - -Not implemented. (S, Win32, VMS, S) +Not implemented. (Win32, S) =item sethostent STAYOPEN -Not implemented. (S, Win32, Plan9, S) +Not implemented. (S, Win32, S, S) =item setnetent STAYOPEN -Not implemented. (S, Win32, Plan9, S) +Not implemented. (S, Win32, S, S) =item setprotoent STAYOPEN -Not implemented. (S, Win32, Plan9, S) +Not implemented. (S, Win32, S, S) =item setservent STAYOPEN -Not implemented. (Plan9, Win32, S) +Not implemented. (S, Win32, S) =item endpwent @@ -1608,19 +1680,19 @@ Not implemented. (S, Win32) =item endnetent -Not implemented. (S, Win32, Plan9) +Not implemented. (S, Win32, S) =item endprotoent -Not implemented. (S, Win32, Plan9) +Not implemented. (S, Win32, S) =item endservent -Not implemented. (Plan9, Win32) +Not implemented. (S, Win32) =item getsockopt SOCKET,LEVEL,OPTNAME -Not implemented. (Plan9) +Not implemented. (S) =item glob EXPR @@ -1680,7 +1752,7 @@ Return values (especially for device and inode) may be bogus. (Win32) =item msgrcv ID,VAR,SIZE,TYPE,FLAGS -Not implemented. (S, Win32, VMS, Plan9, S, VOS) +Not implemented. (S, Win32, VMS, S, S, VOS) =item open FILEHANDLE,EXPR @@ -1722,7 +1794,7 @@ Not implemented. (S, Win32, VMS, S, VOS) =item setgrent -Not implemented. (MPE/iX, Win32) +Not implemented. (S, MPE/iX, VMS, Win32, VMS, S) =item setpgrp PID,PGRP @@ -1734,11 +1806,11 @@ Not implemented. (S, Win32, VMS, S, VOS) =item setpwent -Not implemented. (MPE/iX, Win32) +Not implemented. (S, MPE/iX, Win32, S) =item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL -Not implemented. (Plan9) +Not implemented. (S) =item shmctl ID,CMD,ARG @@ -1770,7 +1842,11 @@ as '', so numeric comparison or manipulation of these fields may cause 'not numeric' warnings. mtime and atime are the same thing, and ctime is creation time instead of -inode change time. (S) +inode change time. (S). + +ctime not supported on UFS (S). + +ctime is creation time instead of inode change time (Win32). device and inode are not meaningful. (Win32) @@ -1807,8 +1883,8 @@ C<$?> right by eight to get the exit value, or that C<$? & 127> 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. @@ -1993,84 +2069,67 @@ First public release with perl5.005. =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 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 @@ -2080,63 +2139,53 @@ active champion on these platforms--or both. They used to work, 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, @@ -2145,12 +2194,13 @@ http://www.cpan.org/ports/index.html for binary distributions. =head1 SEE ALSO -L, L, L, L, L, -L, L, L, L, L, L, -L, L, L, L, L, -L, L, L, L, L, -L, L, L, L, -L, L, L, L, and L. +L, L, L, L, L, +L, L, L, L, L, +L, L, L, L, L, +L, L, L, L, +L, L, L, L, L, +L, L, L, L, +L, L, L, and L. =head1 AUTHORS / CONTRIBUTORS @@ -2175,7 +2225,7 @@ Andrew M. Langmead , Larry Moore , Paul Moore , Chris Nandor , -Matthias Neeracher , +Matthias Neeracher , Philip Newton , Gary Ng <71564.1743@CompuServe.COM>, Tom Phoenix , @@ -2188,6 +2238,3 @@ Michael G Schwern , Dan Sugalski , Nathan Torkington . -=head1 VERSION - -Version 1.50, last modified 10 Jul 2001