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. Keeping
-all data as text significantly simplifies matters.
+the standard distribution as of Perl 5.005) and Storable (included as
+of perl 5.8). Keeping all data as text significantly simplifies matters.
=head2 Files and Filesystems
Don't open the same file more than once at a time for writing, as some
operating systems put mandatory locks on such files.
+Don't assume that write/modify permission on a directory gives the
+right to add or delete files/directories in that directory. That is
+filesystem specific: in some filesystems you need write/modify
+permission also (or even just) in the file/directory itself. In some
+filesystems (AFS, DFS) the permission to add/delete directory entries
+is a completely separate permission.
+
+Don't assume that a single C<unlink> completely gets rid of the file:
+some filesystems (most notably the ones in VMS) have versioned
+filesystems, and unlink() removes only the most recent one (it doesn't
+remove all the versions because by default the native tools on those
+platforms remove just the most recent version, too). The portable
+idiom to remove all the versions of a file is
+
+ 1 while unlink "file";
+
+This will terminate if the file is undeleteable for some reason
+(protected, not there, and so on).
+
Don't count on a specific environment variable existing in C<%ENV>.
Don't count on C<%ENV> entries being case-sensitive, or even
case-preserving. Don't try to clear %ENV by saying C<%ENV = ();>, or,
The Unix System V IPC (C<msg*(), sem*(), shm*()>) is not available
even on all Unix platforms.
+Do not use either the bare result of C<pack("N", 10, 20, 30, 40)>
+or bare v-strings (such as C<v10.20.30.40>) or to represent
+IPv4 addresses: both forms just pack the four bytes into network order.
+That this would be equal to the C language C<in_addr> struct (which is
+what the socket code internally uses) is not guaranteed. To be
+portable use the routines of the Socket extension, such as
+C<inet_aton()>, C<inet_ntoa()>, and C<sockaddr_in()>.
+
The rule of thumb for portable code is: Do it all in portable Perl, or
use a module (that may internally implement it with platform-specific
code, but expose a common interface).
Linux linux ppc-linux
HP-UX hpux PA-RISC1.1
IRIX irix irix
- Mac OS X rhapsody rhapsody
+ Mac OS X darwin darwin
MachTen PPC machten powerpc-machten
NeXT 3 next next-fat
NeXT 4 next OPENSTEP-Mach
The C<$^O> variable and the C<$Config{archname}> values for various
DOSish perls are as follows:
- OS $^O $Config{'archname'}
- --------------------------------------------
- MS-DOS dos
- PC-DOS dos
- OS/2 os2
- Windows 95 MSWin32 MSWin32-x86
- Windows 98 MSWin32 MSWin32-x86
- Windows NT MSWin32 MSWin32-x86
- Windows NT MSWin32 MSWin32-ALPHA
- Windows NT MSWin32 MSWin32-ppc
- Cygwin cygwin
+ OS $^O $Config{archname} ID Version
+ --------------------------------------------------------
+ MS-DOS dos ?
+ PC-DOS dos ?
+ OS/2 os2 ?
+ Windows 3.1 ? ? 0 3 01
+ Windows 95 MSWin32 MSWin32-x86 1 4 00
+ Windows 98 MSWin32 MSWin32-x86 1 4 10
+ Windows ME MSWin32 MSWin32-x86 1 ?
+ Windows NT MSWin32 MSWin32-x86 2 4 xx
+ Windows NT MSWin32 MSWin32-ALPHA 2 4 xx
+ Windows NT MSWin32 MSWin32-ppc 2 4 xx
+ Windows 2000 MSWin32 MSWin32-x86 2 5 xx
+ Windows XP MSWin32 MSWin32-x86 2 ?
+ Windows CE MSWin32 ? 3
+ Cygwin cygwin ?
The various MSWin32 Perl's can distinguish the OS they are running on
via the value of the fifth element of the list returned from
$is_ppc = $MacPerl::Architecture eq 'MacPPC';
$is_68k = $MacPerl::Architecture eq 'Mac68K';
-S<Mac OS X> and S<Mac OS X Server>, based on NeXT's OpenStep OS, will
-(in theory) be able to run MacPerl natively, under the "Classic"
-environment. The new "Cocoa" environment (formerly called the "Yellow Box")
-may run a slightly modified version of MacPerl, using the Carbon interfaces.
-
-S<Mac OS X Server> and its Open Source version, Darwin, both run Unix
-perl natively (with a few patches). Full support for these
-is slated for perl 5.6.
+S<Mac OS X>, based on NeXT's OpenStep OS, runs MacPerl natively, under the
+"Classic" environment. There is no "Carbon" version of MacPerl to run
+under the primary Mac OS X environment. S<Mac OS X> and its Open Source
+version, Darwin, both run Unix perl natively.
Also see:
=item *
-The MacPerl Pages, http://www.macperl.com/ .
+MacPerl Development, http://dev.macperl.org/ .
=item *
-The MacPerl mailing lists, http://www.macperl.org/ .
+The MacPerl Pages, http://www.macperl.com/ .
=item *
-MacPerl Module Porters, http://pudge.net/mmp/ .
+The MacPerl mailing lists, http://lists.perl.org/ .
=back
Not implemented. (Plan9, Win32)
+=item exit EXPR
+
+=item exit
+
+Emulates UNIX exit() (which considers C<exit 1> to indicate an error) by
+mapping the C<1> to SS$_ABORT (C<44>). This behavior may be overridden
+with the pragma C<use vmsish 'exit'>. As with the CRTL's exit()
+function, C<exit 0> is also mapped to an exit status of SS$_NORMAL
+(C<1>); this mapping cannot be overridden. Any other argument to exit()
+is used directly as Perl's exit status. (VMS)
+
=item getsockopt SOCKET,LEVEL,OPTNAME
-Not implemented. (S<Mac OS>, Plan9)
+Not implemented. (Plan9)
=item glob EXPR
=item glob
-Globbing built-in, but only C<*> and C<?> metacharacters are supported.
-(S<Mac OS>)
-
This operator is implemented via the File::Glob extension on most
platforms. See L<File::Glob> for portability information.
=item kill SIGNAL, LIST
-Not implemented, hence not useful for taint checking. (S<Mac OS>,
-S<RISC OS>)
+C<kill(0, LIST)> is implemented for the sake of taint checking;
+use with other signals is unimplemented. (S<Mac OS>)
+
+Not implemented, hence not useful for taint checking. (S<RISC OS>)
C<kill()> doesn't have the semantics of C<raise()>, i.e. it doesn't send
a signal to the identified process like it does on Unix platforms.
=item pipe READHANDLE,WRITEHANDLE
-Not implemented. (S<Mac OS>)
-
Very limited functionality. (MiNT)
=item readlink EXPR
=item setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
-Not implemented. (S<Mac OS>, Plan9)
+Not implemented. (Plan9)
=item shmctl ID,CMD,ARG
=item socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
-Not implemented. (S<Mac OS>, Win32, VMS, S<RISC OS>, VOS, VM/ESA)
+Not implemented. (Win32, VMS, S<RISC OS>, VOS, VM/ESA)
=item stat FILEHANDLE
dev, rdev, blksize, and blocks are not available. inode is not
meaningful and will differ between stat calls on the same file. (os2)
+some versions of cygwin when doing a stat("foo") and if not finding it
+may then attempt to stat("foo.exe") (Cygwin)
+
=item symlink OLDFILE,NEWFILE
Not implemented. (Win32, VMS, S<RISC OS>)
Does not automatically flush output handles on some platforms.
(SunOS, Solaris, HP-UX)
+The return value is POSIX-like (shifted up by 8 bits), which only allows
+room for a made-up value derived from the severity bits of the native
+32-bit condition code (unless overridden by C<use vmsish 'status'>).
+For more details see L<perlvms/$?>. (VMS)
+
=item times
Only the first entry returned is nonzero. (S<Mac OS>)
=item truncate EXPR,LENGTH
-Not implemented. (VMS)
+Not implemented. (Older versions of VMS)
Truncation to zero-length only. (VOS)
If a FILEHANDLE is supplied, it must be writable and opened in append
-mode (i.e., use C<open(FH, '>>filename')>
+mode (i.e., use C<<< open(FH, '>>filename') >>>
or C<sysopen(FH,...,O_APPEND|O_RDWR)>. If a filename is supplied, it
should not be held open elsewhere. (Win32)
AIX
AmigaOS
- Darwin (Rhapsody)
+ Darwin (Mac OS X)
DG/UX
DOS DJGPP 1)
DYNIX/ptx
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. Contact the mailing
- list macperl-porters@macperl.org for more information.
+ 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),
=head1 SEE ALSO
-L<perlaix>, L<perlamiga>, L<perlcygwin>, L<perldos>, L<perlepoc>,
-L<perlebcdic>, L<perlhpux>, L<perlos2>, L<perlos390>, L<perlbs2000>,
-L<perlwin32>, L<perlvms>, L<perlvos>, and L<Win32>.
+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>.
=head1 AUTHORS / CONTRIBUTORS
Paul Moore <Paul.Moore@uk.origin-it.com>,
Chris Nandor <pudge@pobox.com>,
Matthias Neeracher <neeri@iis.ee.ethz.ch>,
+Philip Newton <pne@cpan.org>,
Gary Ng <71564.1743@CompuServe.COM>,
Tom Phoenix <rootbeer@teleport.com>,
AndrE<eacute> Pirard <A.Pirard@ulg.ac.be>,
Dan Sugalski <dan@sidhe.org>,
Nathan Torkington <gnat@frii.com>.
-This document is maintained by Chris Nandor
-<pudge@pobox.com>.
-
=head1 VERSION
-Version 1.48, last modified 24 April 2001
+Version 1.50, last modified 10 Jul 2001