=head1 Incompatible Changes
+=head2 Binary Incompatibility
+
+B<Perl 5.8 is not binary compatible with earlier releases of Perl.>
+
+B<You have to recompile your XS modules.>
+
+(Pure Perl modules should continue to work.)
+
+The major reason for the discontinity is the new IO architecture
+called PerlIO. PerlIO is the default configuration because
+without it many new features of Perl 5.8 cannot be used. In other
+words: you just have to recompile your modules, sorry about that.
+
+In future releases of Perl, non-PerlIO aware XS modules may become
+completely unsupported. This shouldn't be too difficult for module
+authors, however: PerlIO has been designed as a drop-in replacement
+(at the source code level) for the stdio interface.
+
+Depending on your platform, there are also other reasons why
+we decided to break binary compatibility, please read on.
+
=head2 64-bit platforms and malloc
If your pointers are 64 bits wide, the Perl malloc is no longer being
=item *
+The 5.005 threads model (module C<Thread>) is deprecated and expected
+to be removed in Perl 5.10. Multithreaded code should be migrated to
+the new ithreads model (see L<threads> and L<threads::shared>).
+
+=item *
+
The long deprecated uppercase aliases for the string comparison
operators (EQ, NE, LT, LE, GE, GT) have now been removed.
=back
+=head2 Restricted Hashes
+
+A restricted hash is restricted to a certain set of keys, no keys
+outside the set can be added. Also individual keys can be restricted
+so that the key cannot be deleted and the value cannot be changed.
+No new syntax is involved: the Hash::Util module is the interface.
+
=head2 Safe Signals
Perl used to be fragile in that signals arriving at inopportune moments
=item *
+Tied hash interfaces are now required to have the EXISTS and DELETE
+methods (either own or inherited).
+
+=item *
+
If tr/// is just counting characters, it doesn't attempt to
modify its target.
Use of C</c> in substitutions, even with C</g>, elicits
C<Use of /c modifier is meaningless in s///>.
-Use of C</g> with C<split> elicits <Use of /g modifier is meaningless
+Use of C</g> with C<split> elicits C<Use of /g modifier is meaningless
in split>.
=back
=item *
-C<Encode>, by Nick Ing-Simmons and Dan Kogai, provides a mechanism to
-translate between different character encodings. Support for Unicode,
-ISO-8859-1, and ASCII are compiled in to the module. Several other
-encodings (like the rest of the ISO-8859, CP*/Win*, Mac, KOI8-R, three
-variants EBCDIC, Chinese, Japanese, and Korean encodings) are included
-and can be loaded at runtime. (For space considerations, the largest
-Chinese encodings have been separated into their own CPAN module,
-Encode::HanExtra, which Encode will use if available). See L<Encode>.
+C<Encode>, orginally by Nick Ing-Simmons and now maintained by Dan
+Kogai, provides a mechanism to translate between different character
+encodings. Support for Unicode, ISO-8859-1, and ASCII are compiled in
+to the module. Several other encodings (like the rest of the
+ISO-8859, CP*/Win*, Mac, KOI8-R, three variants EBCDIC, Chinese,
+Japanese, and Korean encodings) are included and can be loaded at
+runtime. (For space considerations, the largest Chinese encodings
+have been separated into their own CPAN module, Encode::HanExtra,
+which Encode will use if available). See L<Encode>.
Any encoding supported by Encode module is also available to the
":encoding()" layer if PerlIO is used.
=item *
C<Hash::Util> is the interface to the new I<restricted hashes>
-feature. A restricted hash is restricted to a certain set of keys,
-no keys outside the set can be added. Also individual keys can be
-restricted so that the key cannot be deleted and the value cannot be
-changed. (Implemented by Jeffrey Friedl, Nick Ing-Simmons, and
+feature. (Implemented by Jeffrey Friedl, Nick Ing-Simmons, and
Michael Schwern.)
=item *
L<libnet> is a collection of perl5 modules related to network
programming, from Graham Barr. See L<Net::FTP>, L<Net::NNTP>,
-L<Net::Ping>, L<Net::POP3>, L<Net::SMTP>, and L<Net::Time>.
+L<Net::Ping> (not part of libnet, but related), L<Net::POP3>,
+L<Net::SMTP>, and L<Net::Time>.
Perl installation leaves libnet unconfigured, use F<libnetcfg> to configure.
=item *
-C<Locale::Constants>, C<Locale::Country>, C<Locale::Currency>, and
-C<Locale::Language>, from Neil Bowers, have been added. They provide the
-codes for various locale standards, such as "fr" for France, "usd" for
-US Dollar, and "jp" for Japanese.
+C<Locale::Constants>, C<Locale::Country>, C<Locale::Currency>
+C<Locale::Language>, and L<Locale::Script>, from Neil Bowers, have
+been added. They provide the codes for various locale standards, such
+as "fr" for France, "usd" for US Dollar, and "ja" for Japanese.
use Locale::Country;
=item *
-Math::BigRat for big rational numbers, to accompany Math::BigInt and
+C<Math::BigRat> for big rational numbers, to accompany Math::BigInt and
Math::BigFloat, from Tels.
=item *
C<Storable> gives persistence to Perl data structures by allowing the
storage and retrieval of Perl data to and from files in a fast and
-compact binary format, from Raphael Manfredi. See L<Storable>.
+compact binary format. Because in effect Storable does serialisation
+of Perl data structues, with it you can also clone deep, hierarchical
+datastructures. Storable was created by Raphael Manfredi but it is
+now maintained by the Perl development team. Storable has been
+enhanced to understand the two new hash features, Unicode keys and
+restricted hashes. See L<Storable>.
=item *
=item *
-Net::Ping has been muchly enhanced. Multihoming is now supported.
-There is now "external" protocol which uses Net::Ping::External module
-which runs external ping(1) and parses the output. A version of
-Net::Ping::External is available in CPAN.
+Net::Ping has been muchly enhanced: multihoming is now supported,
+Win32 functionality is better, there is now time measuring
+functionality (optionally high-resolution using Time::HiRes),
+and there is now "external" protocol which uses Net::Ping::External
+module which runs your external ping utility and parses the output.
+A version of Net::Ping::External is available in CPAN.
+
+Note that some of the Net::Ping tests are disabled when running
+under the Perl distribution since one cannot assume one or more
+of the following: enabled echo port at localhost, full Internet
+connectivity, or sympathetic firewalls. You can set the environment
+variable PERL_TEST_Net_Ping to "1" (one) before running the Perl test
+suite to enable all the Net::Ping tests.
=item *
=item *
+C<pod2html> now produces XHTML 1.0.
+
+=item *
+
+C<pod2html> now understands POD written using different line endings
+(PC-like CRLF versus UNIX-like LF versus MacClassic-like CR).
+
+=item *
+
C<s2p> has been completely rewritten in Perl. (It is in fact a full
implementation of sed in Perl: you can use the sed functionality by
using the C<psed> utility.)
=item *
-After a long pause, AmigaOS has been verified to be happy with Perl.
-
-=item *
-
AtheOS ( http://www.atheos.cx/ ) is a new platform.
=item *
=item *
+Localised tied variables no more leak memory
+
+ use Tie::Hash;
+ tie my %tied_hash => 'Tie::StdHash';
+
+ ...
+
+ # Used to leak memory every time local() was called,
+ # in a loop this added up.
+ local($tied_hash{Foo}) = 1;
+
+=item *
+
+Localised hash elements (and %ENV) are correctly unlocalised to not to
+exist, if that's what they were.
+
+
+ use Tie::Hash;
+ tie my %tied_hash => 'Tie::StdHash';
+
+ ...
+
+ # Nothing has set the FOO element so far
+
+ { local $tied_hash{FOO} = 'Bar' }
+
+ # Here the FOO element would have been C<undef>,
+ # but no more so.
+
+As a side effect of this fix, tied hash interfaces B<must> define
+the EXISTS and DELETE methods.
+
+=item *
+
mkdir() now ignores trailing slashes in the directory name,
as mandated by POSIX.
=item *
-The character tables have been updated to Unicode 3.1.1.
+The character tables have been updated to Unicode 3.2.0.
=item *
=item *
+NetBSD/threads: try installing the GNU pth (should be in the
+packages collection, or http://www.gnu.org/software/pth/),
+and Configure with -Duseithreads.
+
+=item *
+
NetBSD/sparc
Perl now works on NetBSD/sparc.
(Y with diaeresis) not behaving correctly when being matched
case-insensitively.
+=head2 Modifying $_ Inside for(..)
+
+ for (1..5) { $_++ }
+
+works without complaint. It shouldn't. (You should be able to
+modify only lvalue elements inside the loops.) You can see the
+correct behaviour by replacing the 1..5 with 1, 2, 3, 4, 5.
+
=head2 mod_perl 1.26 Doesn't Build With Threaded Perl
Use mod_perl 1.27 or higher.
Don't panic. Read INSTALL 'make test' section instead.
-=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured
+=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured
If perl is configured with -Duse64bitall, the successful result of the
subtest 10 of lib/posix may arrive before the successful result of the
formatting 0.6 and -0.6 using the printf format "%.0f", most often
they produce "0" and "-0".)
+=head2 Solaris 2.5
+
+In case you are still using Solaris 2.5 (aka SunOS 5.5), you may
+experience failures (the test core dumping) in lib/locale.t.
+The suggested cure is to upgrade your Solaris.
+
=head2 Failure of Thread (5.005-style) tests
-B<Note that support for 5.005-style threading remains experimental
-and practically unsupported.>
+B<Note that support for 5.005-style threading is deprecated,
+experimental and practically unsupported. In 5.10 it is expected
+to be removed.>
The following tests are known to fail due to fundamental problems in
the 5.005 threading implementation. These are not new failures--Perl
op/numconvert.t 1440 13 0.90% 208 509-510
657-658 665-666 829-830 989-990 1149-1150
-=head2 UNICOS and UNICOS/mk
-
-The io/fs test #31 is failing because in UNICOS and UNICOS/mk the Perl
-truncate() cannot be used to grow the size of filehandles, only to
-reduce the size. The workaround is to truncate files instead of
-filehandles.
-
=head2 UNICOS/mk
=over 4
=head2 Win32
In multi-CPU boxes there are some problems with the I/O buffering:
-some output may appear twice. The following Win32 failures are known
-as of 5.7.3:
-
- Failed Test Stat Wstat Total Fail Failed List of Failed
- -------------------------------------------------------------------------
- ..\ext/threads/t/end.t 6 4 66.67% 3-6
+some output may appear twice.
=head2 XML::Parser not working
Use XML::Parser 2.31 or later.
-=head2 Localising a Tied Variable Leaks Memory
-
- use Tie::Hash;
- tie my %tie_hash => 'Tie::StdHash';
-
- ...
-
- local($tie_hash{Foo}) = 1; # leaks
-
-Code like the above is known to leak memory every time the local()
-is executed.
-
=head2 z/OS (OS/390)
z/OS has rather many test failures but the situation is actually
better than it was in 5.6.0, it's just that so many new modules and
tests have been added.
- Failed Test Stat Wstat Total Fail Failed List of Failed
- -------------------------------------------------------------------------
- ../ext/Data/Dumper/t/dumper.t 321 2 0.62% 311 314
+ Failed Test Stat Wstat Total Fail Failed List of Failed
+ -------------------------------------------------------------------------------
+ ../ext/Data/Dumper/t/dumper.t 339 8 2.36% 311 314 325 327
+ 331 333 337 339
../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
+ ../ext/Storable/t/utf8hash.t 10 2560 148 10 6.76% 1 5 72 76 143-148
../lib/utf8.t 94 13 13.83% 27 30-31 43 46 73
76 79 82 85 88 91
94
- ../lib/Benchmark.t 1 256 159 1 0.63% 75
- ../lib/ExtUtils/t/Constant.t 27 19 70.37% 5-23
+ ../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48
../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9
- op/pat.t 864 9 1.04% 242-243 665 776
+ op/pat.t 900 9 1.00% 242-243 665 776
785 832-834 845
op/sprintf.t 224 3 1.34% 98 100 136
op/tr.t 97 5 5.15% 63 71-74
+ run/fresh_perl.t 94 3 3.19% 92-94
uni/fold.t 780 6 0.77% 61 169 196 661
710-711