X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlport.pod;h=c04528bb778b7bf6d07a460385a490cc04496212;hb=593b9c1462e1fc8a2425e215f64b2197e1bfb796;hp=d74c0da3063b242a4c1b34b880fa7eaf4a382093;hpb=c87488a3b7c8c0bba72aa340df335df1fbbabb60;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlport.pod b/pod/perlport.pod index d74c0da..c04528b 100644 --- a/pod/perlport.pod +++ b/pod/perlport.pod @@ -192,8 +192,8 @@ There may well be others. For example, on an EBCDIC implementation such as z/OS (OS/390) or OS/400 (using the ILE, the PASE is ASCII-based) 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 + LF eq \025 eq \x15 eq \cU eq chr(21) eq CP-1047 21 + LF eq \045 eq \x25 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 @@ -487,6 +487,42 @@ To convert $Config{perlpath} to a file pathname, say: if ($^O ne 'VMS') {$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;} +=head2 Networking + +Don't assume that you can reach the public Internet. + +Don't assume that there is only one way to get through firewalls +to the public Internet. + +Don't assume that you can reach outside world through any other port +than 80, or some web proxy. ftp is blocked by many firewalls. + +Don't assume that you can send email by connecting to the local SMTP port. + +Don't assume that you can reach yourself or any node by the name +'localhost'. The same goes for '127.0.0.1'. You will have to try both. + +Don't assume that the host has only one network card, or that it +can't bind to many virtual IP addresses. + +Don't assume a particular network device name. + +Don't assume a particular set of ioctl()s will work. + +Don't assume that you can ping hosts and get replies. + +Don't assume that any particular port (service) will respond. + +Don't assume that Sys::Hostname() (or any other API or command) +returns either a fully qualified hostname or a non-qualified hostname: +it all depends on how the system had been configured. Also remember +things like DHCP and NAT-- the hostname you get back might not be very +useful. + +All the above "don't":s may look daunting, and they are -- but the key +is to degrade gracefully if one cannot reach the particular network +service one wants. Croaking or hanging do not look very professional. + =head2 Interprocess Communication (IPC) In general, don't directly access the system in code meant to be @@ -600,6 +636,9 @@ The value for C<$offset> in Unix will be C<0>, but in Mac OS will be some large number. C<$offset> can then be added to a Unix time value to get what should be the proper value on any system. +On Windows (at least), you shouldn't pass a negative value to C or +C. + =head2 Character sets and character encoding Assume very little about character sets. @@ -629,6 +668,22 @@ and time formatting--amongst other things. If you really want to be international, you should consider Unicode. See L and L for more information. +If you want to use non-ASCII bytes (outside the bytes 0x00..0x7f) in +the "source code" of your code, to be portable you have to be explicit +about what bytes they are. Someone might for example be using your +code under a UTF-8 locale, in which case random native bytes might be +illegal ("Malformed UTF-8 ...") This means that for example embedding +ISO 8859-1 bytes beyond 0x7f into your strings might cause trouble +later. If the bytes are native 8-bit bytes, you can use the C +pragma. If the bytes are in a string (regular expression being a +curious string), you can often also use the C<\xHH> notation instead +of embedding the bytes as-is. If they are in some particular legacy +encoding (ether single-byte or something more complicated), you can +use the C pragma. (If you want to write your code in UTF-8, +you can use either the C pragma, or the C pragma.) +The C and C pragmata are available since Perl 5.6.0, and +the C pragma since Perl 5.8.0. + =head2 System Resources If your code is destined for systems with severely constrained (or @@ -1636,6 +1691,11 @@ Not implemented. (S, Win32, VM/ESA) Not implemented. (S, Win32, VMS, VM/ESA) +=item gethostbyname + +C does not work everywhere: you may have +to use C. (S, S) + =item gethostent Not implemented. (S, Win32) @@ -2081,40 +2141,43 @@ available at http://www.cpan.org/src/index.html AIX BeOS + BSD/OS (BSDi) Cygwin DG/UX DOS DJGPP 1) DYNIX/ptx EPOC R5 FreeBSD + HI-UXMPP (Hitachi) (5.8.0 worked but we didn't know it) HP-UX IRIX Linux Mac OS Classic - Mac OS X (Darwin) + Mac OS X (Darwin) MPE/iX NetBSD NetWare NonStop-UX - ReliantUNIX (SINIX) + ReliantUNIX (formerly SINIX) OpenBSD - OpenVMS (VMS) + OpenVMS (formerly VMS) + Open UNIX (Unixware) (since Perl 5.8.1/5.9.0) OS/2 OS/400 (using the PASE) (since Perl 5.8.1/5.9.0) PowerUX - POSIX-BC (BS2000) + POSIX-BC (formerly BS2000) QNX Solaris SunOS 4 - SUPER-UX - Tru64 UNIX (DEC OSF/1, Digital UNIX) + SUPER-UX (NEC) + Tru64 UNIX (formerly DEC OSF/1, Digital UNIX) UNICOS UNICOS/mk UTS VOS Win95/98/ME/2K/XP 2) WinCE - z/OS (OS/390) + z/OS (formerly OS/390) VM/ESA 1) in DOS mode either the DOS or OS/2 ports can be used @@ -2206,7 +2269,7 @@ http://www.cpan.org/ports/index.html for binary distributions. 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, L, L, L, L,