X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlport.pod;h=c1a5483add6795cb520dcce8ed01020d9811360a;hb=2b5ab1e742ea1b1374dcea7f6f90ef5c5cf29914;hp=918827c9d721a25733024f993e9bd928f7e01cbc;hpb=7c5ffed331e27cfa0bc5b3c2be27e3e684e078bd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlport.pod b/pod/perlport.pod index 918827c..c1a5483 100644 --- a/pod/perlport.pod +++ b/pod/perlport.pod @@ -148,6 +148,13 @@ And this example is actually better than the previous one even for Unix platforms, because now any C<\015>'s (C<\cM>'s) are stripped out (and there was much rejoicing). +An important thing to remember is that functions that return data +should translate newlines when appropriate. Often one line of code +will suffice: + + $data =~ s/\015?\012/\n/g; + return $data; + =head2 Numbers endianness and Width @@ -175,7 +182,7 @@ transfer and store numbers always in text format, instead of raw binary, or consider using modules like C (included in the standard distribution as of Perl 5.005) and C. -=head2 Files +=head2 Files and Filesystems Most platforms these days structure files in a hierarchical fashion. So, it is reasonably safe to assume that any platform supports the @@ -189,11 +196,19 @@ root directory. VMS, Windows, and OS/2 can work similarly to Unix with C as path separator, or in their own idiosyncratic ways (such as having several -root directories and various "unrooted" device files such NIL: and +root directories and various "unrooted" device files such NIL: and LPT:). S uses C<:> as a path separator instead of C. +The filesystem may support neither hard links (C) nor +symbolic links (C, C, C). + +The filesystem may not support neither access timestamp nor change +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). + 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. @@ -228,19 +243,21 @@ Also of use is C, from the standard distribution, which splits a pathname into pieces (base filename, full path to directory, and file suffix). -Even when on a single platform (if you can call UNIX a single -platform), remember not to count on the existence or the contents of -system-specific files, like F, F, or -F. For example the F may exist but it -may not contain the encrypted passwords because the system is using -some form of enhanced security-- or it may not contain all the -accounts because the system is using NIS. If code does need to rely -on such a file, include a description of the file and its format in -the code's documentation, and make it easy for the user to override -the default location of the file. +Even when on a single platform (if you can call UNIX a single platform), +remember not to count on the existence or the contents of +system-specific files or directories, like F, +F, F, or even F. For +example, F may exist but it may not contain the encrypted +passwords because the system is using some form of enhanced security -- +or it may not contain all the accounts because the system is using NIS. +If code does need to rely on such a file, include a description of the +file and its format in the code's documentation, and make it easy for +the user to override the default location of the file. + +Don't assume a text file will end with a newline. Do not have two files of the same name with different case, like -F and , as many platforms have case-insensitive +F and F, as many platforms have case-insensitive filenames. Also, try not to have non-word characters (except for C<.>) in the names, and keep them to the 8.3 convention, for maximum portability. @@ -250,11 +267,17 @@ Likewise, if using C, try to keep the split functions to make it so the resulting files have a unique (case-insensitively) first 8 characters. -Don't assume C> won't be the first character of a filename. Always -use C> explicitly to open a file for reading: +There certainly can be whitespace in filenames. 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. open(FILE, "<$existing_file") or die $!; +Actually, though, if filenames might use strange characters, it is +safest to open it with C instead of C, which is magic. + =head2 System Interaction @@ -284,6 +307,8 @@ C instead. Don't count on per-program environment variables, or per-program current directories. +Don't count on specific values of C<$!>. + =head2 Interprocess Communication (IPC) @@ -320,6 +345,7 @@ code, but expose a common interface). The UNIX System V IPC (C) is not available even in all UNIX platforms. + =head2 External Subroutines (XS) XS code, in general, can be made to work with any platform; but dependent @@ -375,7 +401,7 @@ C. Assume very little about character sets. Do not assume anything about the numerical values (C, C) of characters. Do not assume that the alphabetic characters are encoded contiguously (in -numerical sense). Do no assume anything about the ordering of the +numerical sense). Do not assume anything about the ordering of the characters. The lowercase letters may come before or after the uppercase letters, the lowercase and uppercase may be interlaced so that both 'a' and 'A' come before the 'b', the accented and other @@ -385,10 +411,10 @@ before the 'b'. =head2 Internationalisation -If you may assume POSIX (a rather large assumption, that: in practise -that means UNIX) you may read more about the POSIX locale system from +If you may assume POSIX (a rather large assumption, that in practice +means UNIX), you may read more about the POSIX locale system from L. The locale system at least attempts to make things a -little bit more portable or at least more convenient and +little bit more portable, or at least more convenient and native-friendly for non-English users. The system affects character sets and encoding, and date and time formatting, among other things. @@ -480,7 +506,7 @@ Unix flavors: FreeBSD freebsd freebsd-i386 Linux linux i386-linux HP-UX hpux PA-RISC1.1 - IRIX irix irix + IRIX irix irix OSF1 dec_osf alpha-dec_osf SunOS solaris sun4-solaris SunOS solaris i86pc-solaris @@ -551,7 +577,8 @@ Also see: =item The djgpp environment for DOS, C =item The EMX environment for DOS, OS/2, etc. C, -C +C or +C =item Build instructions for Win32, L. @@ -582,7 +609,7 @@ limited to 31 characters, and may include any character except C<:>, which is reserved as a path separator. Instead of C, see C and C in the -C module. +C module, or C and C. In the MacPerl application, you can't run a program from the command line; programs that expect C<@ARGV> to be populated can be edited with something @@ -617,10 +644,9 @@ the application or MPW tool version is running, check: $is_ppc = $MacPerl::Architecture eq 'MacPPC'; $is_68k = $MacPerl::Architecture eq 'Mac68K'; -S, to be based on NeXT's OpenStep OS, will be able to run -MacPerl natively (in the Blue Box, and even in the Yellow Box, once some -changes to the toolbox calls are made), but Unix perl will also run -natively. +S, to be based on NeXT's OpenStep OS, will (in theory) be able +to run MacPerl natively, but Unix perl will also run natively under the +built-in Unix environment. Also see: @@ -750,12 +776,12 @@ 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. -The following C functions are unimplemented on VOS, any any attempt by +The following C functions are unimplemented on VOS, and any attempt by Perl to use them will result in a fatal error message and an immediate -exit from Perl: dup, do_aspawn, do_spawn, execlp, execl, execvp, fork, -waitpid. Once these functions become available in the VOS POSIX.1 -implementation, you can either recompile and rebind Perl, or you can -download a newer port from ftp.stratus.com. +exit from Perl: dup, do_aspawn, do_spawn, fork, waitpid. Once these +functions become available in the VOS POSIX.1 implementation, you can +either recompile and rebind Perl, or you can download a newer port from +ftp.stratus.com. 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 @@ -822,7 +848,7 @@ an effect on what happens with some perl functions (such as C, C, C, C, C, C, C, C), as well as bit-fiddling with ASCII constants using operators like C<^>, C<&> and C<|>, not to mention dealing with socket interfaces to ASCII computers -(see L<"NEWLINES">). +(see L). Fortunately, most web servers for the mainframe will correctly translate the C<\n> in the following statement to its ASCII equivalent (note that @@ -833,6 +859,7 @@ C<\r> is the same under both Unix and OS/390 & VM/ESA): The value of C<$^O> on OS/390 is "os390". The value of C<$^O> on VM/ESA is "vmesa". + Some simple tricks for determining if you are running on an EBCDIC platform could include any of the following (perhaps all): @@ -905,7 +932,7 @@ C contains a single item list. The filesystem will also expand system variables in filenames if enclosed in angle brackets, so CSystem$DirE.Modules> would look for the file S>. The obvious implication of this is -that BE> and should +that BE>> and should be protected when C is used for input. Because C<.> was in use as a directory separator and filenames could not @@ -1126,6 +1153,7 @@ Invokes VMS debugger. (VMS) Not implemented. (S) Implemented via Spawn. (VM/ESA) + =item fcntl FILEHANDLE,FUNCTION,SCALAR Not implemented. (Win32, VMS) @@ -1305,6 +1333,9 @@ method of spawning a process. (Win32) Not implemented. (S, Win32, VMS, S) +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 lstat FILEHANDLE =item lstat EXPR @@ -1338,6 +1369,8 @@ open to C<|-> and C<-|> are unsupported. (S, Win32, S) Not implemented. (S) +Very limited functionality. (MiNT) + =item readlink EXPR =item readlink @@ -1435,6 +1468,11 @@ the child program uses a compatible version of the emulation library. I will call the native command line direct and no such emulation of a child Unix program will exists. Mileage B vary. (S) +Far from being POSIX compliant. Because there may be no underlying +/bin/sh tries to work around the problem by forking and execing the +first token in its argument string. Handles basic redirection +("E" or "E") on its own behalf. (MiNT) + =item times Only the first entry returned is nonzero. (S) @@ -1464,6 +1502,9 @@ should not be held open elsewhere. (Win32) Returns undef where unavailable, as of version 5.005. +C works but the correct permissions are only set when the file +is finally close()d. (AmigaOS) + =item utime LIST Only the modification time is updated. (S, VMS, S) @@ -1491,23 +1532,43 @@ Not useful. (S) =over 4 -=item 1.35, 9 September 1998 +=item v1.39, 11 February, 1999 + +Changes from Jarkko and EMX URL fixes Michael Schwern. Additional +note about newlines added. + +=item v1.38, 31 December 1998 + +More changes from Jarkko. -Updated for Stratus VOS. +=item v1.37, 19 December 1998 -=item 1.33, 06 August 1998 +More minor changes. Merge two separate version 1.35 documents. + +=item v1.36, 9 September 1998 + +Updated for Stratus VOS. Also known as version 1.35. + +=item v1.35, 13 August 1998 + +Integrate more minor changes, plus addition of new sections under +L<"ISSUES">: L<"Numbers endianness and Width">, +L<"Character sets and character encoding">, +L<"Internationalisation">. + +=item v1.33, 06 August 1998 Integrate more minor changes. -=item 1.32, 05 August 1998 +=item v1.32, 05 August 1998 Integrate more minor changes. -=item 1.30, 03 August 1998 +=item v1.30, 03 August 1998 Major update for RISC OS, other minor changes. -=item 1.23, 10 July 1998 +=item v1.23, 10 July 1998 First public release with perl5.005. @@ -1529,6 +1590,7 @@ Jarkko Hietaniemi Ejhi@iki.fi, Luther Huffman Elutherh@stratcom.comE, Nick Ing-Simmons Enick@ni-s.u-net.comE, Andreas J. KEnig Ekoenig@kulturbox.deE, +Markus Laker Emlaker@contax.co.ukE, Andrew M. Langmead Eaml@world.std.comE, Paul Moore EPaul.Moore@uk.origin-it.comE, Chris Nandor Epudge@pobox.comE, @@ -1539,12 +1601,13 @@ Peter Prymmer Epvhp@forte.comE, Hugo van der Sanden Ehv@crypt0.demon.co.ukE, Gurusamy Sarathy Egsar@umich.eduE, Paul J. Schinder Eschinder@pobox.comE, +Michael G Schwern Eschwern@pobox.comE, Dan Sugalski Esugalskd@ous.eduE, Nathan Torkington Egnat@frii.comE. -This document is maintained by Chris Nandor. +This document is maintained by Chris Nandor +Epudge@pobox.comE. =head1 VERSION -Version 1.35, last modified 09 September 1998. - +Version 1.39, last modified 11 February 1999