summaryrefslogtreecommitdiff
path: root/pod/perlport.pod
diff options
context:
space:
mode:
Diffstat (limited to 'pod/perlport.pod')
-rw-r--r--pod/perlport.pod62
1 files changed, 38 insertions, 24 deletions
diff --git a/pod/perlport.pod b/pod/perlport.pod
index a2c798f8cc..4234fcd797 100644
--- a/pod/perlport.pod
+++ b/pod/perlport.pod
@@ -196,6 +196,8 @@ transfer and store numbers always in text format, instead of raw
binary, or consider using modules like Data::Dumper (included in
the standard distribution as of Perl 5.005) and Storable.
+Also, don't depend on specific values returned from C<printf> and
+C<sprintf>. These in some cases may differ from platform to platform.
=head2 Files and Filesystems
@@ -257,7 +259,7 @@ Also of use is File::Basename, 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),
+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</etc/passwd>,
F</etc/sendmail.conf>, F</etc/resolv.conf>, or even F</tmp/>. For
@@ -343,27 +345,25 @@ often behave differently, and often represent their results in a
platform-dependent way. Thus you should seldom depend on them to produce
consistent results.
-The UNIX System V IPC (msg*(), sem*(), shm*()) is not available
-even in all UNIX platforms.
-
One especially common bit of Perl code is opening a pipe to sendmail:
- open(MAIL, '| /usr/lib/sendmail -t') or die $!;
+ open(MAIL, '|/usr/lib/sendmail -t') or die $!;
This is fine for systems programming when sendmail is known to be
available. But it is not fine for many non-Unix systems, and even
some Unix systems that may not have sendmail installed. If a portable
-solution is needed, see the various distributions on CPAN that deal with
-it. Mail::Mailer and Mail::Send in the MailTools distribution
-are commonly used, and provide several mailing methods, including mail,
-sendmail, and direct SMTP (via Net::SMTP) if a mail transfer agent is
-not available. Mail::Sendmail is a standalone module that provides
-simple, platform-independent mailing.
+solution is needed, see the C<Mail::Send> and C<Mail::Mailer> modules
+in the C<MailTools> distribution. C<Mail::Mailer> provides several
+mailing methods, including mail, sendmail, and direct SMTP
+(via C<Net::SMTP>) if a mail transfer agent is not available.
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).
+The Unix System V IPC (C<msg*(), sem*(), shm*()>) is not available
+even in all Unix platforms.
+
=head2 External Subroutines (XS)
@@ -415,6 +415,13 @@ Date::Parse. An array of values, such as those returned by
C<localtime>, can be converted to an OS-specific representation using
Time::Local.
+When calculating specific times, such as for tests in time or date modules,
+it may be appropriate to calculate an offset for the epoch.
+ require Time::Local;
+ $offset = Time::Local::timegm(0, 0, 0, 1, 0, 70);
+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.
=head2 Character sets and character encoding
@@ -432,7 +439,7 @@ before the 'b'.
=head2 Internationalisation
If you may assume POSIX (a rather large assumption, that in practice
-means UNIX), you may read more about the POSIX locale system (see
+means Unix), you may read more about the POSIX locale system from
L<perllocale>. The locale system at least attempts to make things a
little bit more portable, or at least more convenient and
native-friendly for non-English users. The system affects character
@@ -479,6 +486,11 @@ to other platforms easier. Use the Config module and the special
variable C<$^O> to differentiate platforms, as described in
L<"PLATFORMS">.
+Be careful in the tests you supply with your module or programs. Often
+module code is fully portable, but the tests are not. This occurs
+often when tests spawn off other processes or call external programs
+to aid in the testing, or when (as noted above) the tests assume certain
+things about the filesystem and paths.
Be careful not to depend on a specific output style for errors,
such as when checking C<$@> after an C<eval>. Some platforms
expect a certain output format, and perl on those platforms may
@@ -535,30 +547,29 @@ field of the string returned by typing C<uname -a> (or a similar command)
at the shell prompt. Here, for example, are a few of the more popular
Unix flavors:
- uname $^O $Config{'archname'}
+ uname $^O $Config{'archname'}
--------------------------------------------
- AIX aix aix
+ AIX aix aix
BSD/OS bsdos i386-bsdos
dgux dgux AViiON-dgux
DYNIX/ptx dynixptx i386-dynixptx
- FreeBSD freebsd freebsd-i386
- Linux linux i386-linux
+ FreeBSD freebsd freebsd-i386
+ Linux linux i386-linux
Linux linux i586-linux
Linux linux ppc-linux
- HP-UX hpux PA-RISC1.1
- IRIX irix irix
+ HP-UX hpux PA-RISC1.1
+ IRIX irix irix
openbsd openbsd i386-openbsd
- OSF1 dec_osf alpha-dec_osf
+ OSF1 dec_osf alpha-dec_osf
reliantunix-n svr4 RM400-svr4
SCO_SV sco_sv i386-sco_sv
SINIX-N svr4 RM400-svr4
sn4609 unicos CRAY_C90-unicos
sn6521 unicosmk t3e-unicosmk
sn9617 unicos CRAY_J90-unicos
- sn9716 unicos CRAY_J90-unicos
- SunOS solaris sun4-solaris
- SunOS solaris i86pc-solaris
- SunOS4 sunos sun4-sunos
+ SunOS solaris sun4-solaris
+ SunOS solaris i86pc-solaris
+ SunOS4 sunos sun4-sunos
Note that because the C<$Config{'archname'}> may depend on the hardware
architecture it may vary quite a lot, much more than the C<$^O>.
@@ -1603,6 +1614,8 @@ Not useful. (S<RISC OS>)
=over 4
+=item v1.42, 22 May 1999
+Added notes about tests, sprintf/printf, and epoch offsets.
=item v1.41, 19 May 1999
Lots more little changes to formatting and content.
@@ -1675,6 +1688,7 @@ Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>,
Andreas J. KE<ouml>nig E<lt>koenig@kulturbox.deE<gt>,
Markus Laker E<lt>mlaker@contax.co.ukE<gt>,
Andrew M. Langmead E<lt>aml@world.std.comE<gt>,
+Larry Moore E<lt>ljmoore@freespace.netE<gt>,
Paul Moore E<lt>Paul.Moore@uk.origin-it.comE<gt>,
Chris Nandor E<lt>pudge@pobox.comE<gt>,
Matthias Neeracher E<lt>neeri@iis.ee.ethz.chE<gt>,
@@ -1693,4 +1707,4 @@ E<lt>pudge@pobox.comE<gt>.
=head1 VERSION
-Version 1.41, last modified 19 May 1999
+Version 1.42, last modified 22 May 1999