=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.
=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.
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 *
+The return value of Cwd::fastcwd() is now tainted.
+
+=item *
+
Data::Dumper has now an option to sort hashes.
=item *
=item *
+Devel::Peek now has an interface for the Perl memory statistics
+(this works only if you are using perl's malloc, and if you have
+compiled with debugging).
+
+=item *
+
The English module can now be used without the infamous performance
hit by saying
=item *
+ExtUtils::MakeMaker now uses File::Spec internally, which hopefully
+leads into better portability.
+
+=item *
+
Fcntl, Socket, and Sys::Syslog have been rewritten to use the
new-style constant dispatch section (see L<ExtUtils::Constant>).
This means that they will be more robust and hopefully faster.
=item *
-Devel::Peek now has an interface for the Perl memory statistics
-(this works only if you are using perl's malloc, and if you have
-compiled with debugging).
-
-=item *
-
IPC::Open3 now allows the use of numeric file descriptors.
=item *
=item *
-ExtUtils::MakeMaker now uses File::Spec internally, which hopefully
-leads into better portability.
-
-=item *
-
Math::BigFloat and Math::BigInt have undergone a full rewrite.
They are now magnitudes faster, and they support various
bignum libraries such as GMP and PARI as their backends.
=item *
-If binary compatibility with the 5.005 release is not wanted, Configure
-no longer suggests including the 5.005 modules in @INC.
+Since Perl 5.8 is not binary-compatible with previous releases
+of Perl, Configure no longer suggests including the 5.005
+modules in @INC.
=item *
rules for the conversion. Some platforms that used to use gcvt may
now resort to the slower sprintf.
+=item *
+
+The obsolete method of making a special (e.g., debugging) flavor
+of perl by saying
+
+ make LIBPERL=libperld.a
+
+has been removed. Use -DDEBUGGING instead.
+
=back
=head2 New Or Improved Platforms
=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 *
+Stratus VOS is now supported using Perl's native build method
+(Configure). This is the recommended method to build Perl on
+VOS. The older methods, which build miniperl, are still
+available. See L<perlvos>.
+
+=item *
+
Amdahl UTS UNIX mainframe platform is now supported.
=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 *
+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.
=item *
+Stratus VOS
+
+The native build method requires at least VOS Release 14.5.0
+and GNU C++/GNU Tools 2.0.1 or later. The Perl pack function
+now maps overflowed values to +infinity and underflowed values
+to -infinity.
+
+=item *
+
Tru64 (aka Digital UNIX, aka DEC OSF/1)
The operating system version letter now recorded in $Config{osvers}.
works, but for example C<bin:perl -v> doesn't. The exact reason isn't
known but the current suspect is the F<ixemul> library.
+=head2 ext/threads/t/libc
+
+If this test fails, it indicates that your libc (C library) is not
+threadsafe. This particular test stress tests the localtime() call to
+find out whether it is threadsafe. See L<perlthrtut> for more information.
+
=head2 FreeBSD Failing locale Test 117 For ISO8859-15 Locales
The ISO8859-15 locales may fail the locale test 117 in FreeBSD.
(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
-------------------------------------------------------------------------
../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ??
../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65
- ../ext/POSIX/t/posix.t 31 1 3.23% 10
If you are building on a UFS partition, you will also probably see
t/op/stat.t subtest #9 fail. This is caused by Darwin's UFS not
supporting inode change time.
+Also the ext/POSIX/t/posix.t subtest #10 fails but it is skipped for
+now because the failure is Apple's fault, not Perl's (blocked signals
+are lost).
+
+If you Configure with ithreads, ext/threads/t/libc.t will fail, again
+not Perl's fault-- the libc of Mac OS X is not threadsafe (in this
+particular test the localtime() call is found to be threadunsafe.)
+
=head2 op/sprintf tests 91, 129, and 130
The op/sprintf tests 91, 129, and 130 are known to fail on some platforms.
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 Stratus VOS
+
+When Perl is built using the native build process on VOS Release
+14.5.0 and GNU C++/GNU Tools 2.0.1, all attempted tests either
+pass or result in TODO (ignored) failures.
+
=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
../lib/autouse.t 10 1 10.00% 4
op/flip.t 15 1 6.67% 15
-These failures are unlikely to get fixed as the 5.005-style
-threads are considered fundamentally broken.
+These failures are unlikely to get fixed as the 5.005-style threads
+are considered fundamentally broken. (Basically what happens is that
+competing threads can corrupt shared global state.)
=head2 UNICOS
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------
- ../ext/Socket/socketpair.t 1 256 45 1 2.22% 12
../lib/Math/Trig.t 26 1 3.85% 25
../lib/warnings.t 460 1 0.22% 425
- io/fs.t 36 1 2.78% 31
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.
+The Trig and numconvert failures are caused by the slighly differing
+(from IEEE) floating point implementation of UNICOS. The warnings
+failure is also related: the test assumes a certain floating point
+output format, this assumption fails in UNICOS.
=head2 UNICOS/mk
=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 357 8 2.24% 311 314 325 327
+ 331 333 337 339
../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
- ../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
+ ../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79
+ 110-111 150 161
+ ../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
- 785 832-834 845
+ op/pat.t 910 7 0.77% 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
uni/fold.t 780 6 0.77% 61 169 196 661
710-711
+The dumper.t and downgrade.t are problems in the tests, the io_unix
+and sprintf are problems in the USS (UDP sockets and printf formats).
+The pat, tr, and fold are genuine Perl problems caused by EBCDIC (and
+in the pat and fold cases, combining that with Unicode). The Constant
+and Embed are probably problems in the tests (since they test Perl's
+ability to build extensions, and that seems to be working reasonably well.)
+
=head2 Localising Tied Arrays and Hashes Is Broken
local %tied_array;