=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.
the default encoding of your STDIN, STDOUT, and STDERR, and of
B<any subsequent file open>, is UTF-8.
-=item *
+=back
-If your filesystem supports returning UTF-8 encoded filenames,
-it is possible to make Perl to understand that the filenames
-returned by readdir() and glob() are in Unicode.
+=head2 Restricted Hashes
-=back
+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
=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.
=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 *
=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 *
-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