-=head1 NAME
+.=head1 NAME
perldelta - what is new for perl v5.8.0
(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.
+The major reason for the discontinuity 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 containing XS code, 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
=item *
Earlier Perls treated "sub foo (@bar)" as equivalent to "sub foo (@)".
-The prototypes are now checked at compile-time for invalid characters.
-An optional warning is generated ("Illegal character in prototype...")
-but this may be upgraded to a fatal error in a future release.
+The prototypes are now checked better at compile-time for invalid
+syntax. An optional warning is generated ("Illegal character in
+prototype...") but this may be upgraded to a fatal error in a future
+release.
+
+=item *
+
+The existing behaviour when localising tied arrays and hashes is wrong,
+and will be changed in a future release, so do not rely on the existing
+behaviour. See L<"Localising Tied Arrays and Hashes Is Broken">.
=back
For developers interested in enhancing Perl's Unicode capabilities:
almost all the UCD files are included with the Perl distribution in
-the F<lib/unicore subdirectory>. The most notable omission, for space
+the F<lib/unicore> subdirectory. The most notable omission, for space
considerations, is the Unihan database.
=item *
=item *
+The $Config{byteorder} (and corresponding BYTEORDER in config.h) was
+previously wrong in platforms if sizeof(long) was 4, but sizeof(IV)
+was 8. The byteorder was only sizeof(long) bytes long (1234 or 4321),
+but now it is correctly sizeof(IV) bytes long, (12345678 or 87654321).
+(This problem didn't affect Windows platforms.)
+
+Also, $Config{byteorder} is now computed dynamically--this is more
+robust with "fat binaries" where an executable image contains binaries
+for more than one binary platform, and when cross-compiling.
+
+=item *
+
C<perl -d:Module=arg,arg,arg> now works (previously one couldn't pass
in multiple arguments.)
=item *
+POSIX::sleep() now returns the number of I<unslept> seconds
+(as the POSIX standard says), as opposed to CORE::sleep() which
+returns the number of slept seconds.
+
+=item *
+
The printf() and sprintf() now support parameter reordering using the
C<%\d+\$> and C<*\d+\$> syntaxes. For example
storage and retrieval of Perl data to and from files in a fast and
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
+datastructures. Storable was originally created by Raphael Manfredi,
+but it is now maintained by Abhijit Menon-Sen. Storable has been
enhanced to understand the two new hash features, Unicode keys and
restricted hashes. See L<Storable>.
=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.
C<perlcc> has been rewritten and its user interface (that is,
command line) is much more like that of the UNIX C compiler, cc.
(The perlbc tools has been removed. Use C<perlcc -B> instead.)
+B<Note that perlcc is still considered very experimental and
+unsupported.>
=item *
=item *
-$Config{byteorder} is now computed dynamically (this is more robust
-with "fat binaries" where an executable image contains binaries for
-more than one binary platform.)
-
-=item *
-
Because PerlIO is now the default on most platforms, "-perlio" doesn't
get appended to the $Config{archname} (also known as $^O) anymore.
Instead, if you explicitly choose not to use perlio (Configure command
=item *
caller() could cause core dumps in certain situations. Carp was sometimes
-affected by this problem.
+affected by this problem. In particular, caller() now returns a
+subroutine name of C<(unknown)> for subroutines that have been removed
+from the symbol table.
=item *
=item *
C<*foo{FORMAT}> now works.
+
=item *
Infinity is now recognized as a number.
# 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.
+
+ # This used to print, but not now.
+ print "exists!\n" if exists $tied_hash{FOO};
As a side effect of this fix, tied hash interfaces B<must> define
the EXISTS and DELETE methods.
HP-UX
-README.hpux updated; C<Configure -Duse64bitall> now works.
+README.hpux updated; C<Configure -Duse64bitall> now works;
+now uses HP-UX malloc instead of Perl malloc.
=item *
The C<waitpid> emulation has been improved. The worst bug (now fixed)
was that a pid of -1 would cause a wildcard search of all processes on
-the system. The most significant enhancement is that we can now
-usually get the completion status of a terminated process.
+the system.
POSIX-style signals are now emulated much better on VMS versions prior
to 7.0.
user's default privileges, which could sometimes result in a mismatch
between reported access and actual access.
+There is a new C<kill> implementation based on C<sys$sigprc> that allows
+older VMS systems (pre-7.0) to use C<kill> to send signals rather than
+simply force exit. This implementation also allows later systems to
+call C<kill> from within a signal handler.
+
+Iterative logical name translations are now limited to 10 iterations in
+imitation of SHOW LOGICAL and other OpenVMS facilities.
+
=item *
Windows
=item *
-C<File::Spec->tmpdir()> now prefers C:/temp over /tmp
+C<< File::Spec->tmpdir() >> now prefers C:/temp over /tmp
(works better when perl is running as service).
=item *
=item *
+Win64 compilation is now supported.
+
+=item *
+
winsock handle leak fixed.
=item *
=head1 New Tests
-Several new tests have been added, especially for the F<lib>
-subsection. There are now about 56 000 individual tests (spread over
-about 620 test scripts), in the regression suite (5.6.1 has about
-11700 tests, in 258 test scripts) Many of the new tests are introduced
-by the new modules, but still in general Perl is now more thoroughly
-tested.
+Several new tests have been added, especially for the F<lib> and F<ext>
+subsections. There are now about 65 000 individual tests (spread over
+about 700 test scripts), in the regression suite (5.6.1 has about
+11700 tests, in 258 test scripts) Many of the new tests are of course
+introduced by the new modules, but still in general Perl is now more
+thoroughly tested.
Because of the large number of tests, running the regression suite
will take considerably longer time than it used to: expect the suite
=back
-=head2 Amiga Perl Invoking Mystery
+=head2 BeOS
+
+The following tests fail on 5.8.0 Perl in BeOS Personal 5.03:
-One cannot call Perl using the C<volume:> syntax, that is, C<perl -v>
-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.
+ t/op/lfs............................FAILED at test 17
+ t/op/magic..........................FAILED at test 24
+ ext/POSIX/t/sigaction...............FAILED at test 13
+ ext/POSIX/t/waitpid.................FAILED at test 1
+
+See L<perlbeos> (README.beos) for more details.
=head2 ext/threads/t/libc
subtest 9, which confuses the test harness so much that it thinks the
subtest 9 failed.
+=head2 Linux with glibc 2.2.5 fails t/op/int subtest #6 with -Duse64bitint
+
+This is a known bug in the glibc 2.2.5 with long long integers.
+( http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 )
+
=head2 Linux With Sfio Fails op/misc Test 48
No known fix.
14.5.0 and GNU C++/GNU Tools 2.0.1, all attempted tests either
pass or result in TODO (ignored) failures.
+=head2 Term::ReadKey not working on Win32
+
+Use Term::ReadKey 2.20 or later.
+
=head2 Failure of Thread (5.005-style) tests
B<Note that support for 5.005-style threading is deprecated,
../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
+ ../lib/Math/Trig.t 26 1 3.85% 25
+ ../lib/warnings.t 470 1 0.21% 429
+
+The Trig.t failure is caused by the slighly differing (from IEEE)
+floating point implementation of UNICOS. The warnings.t failure is
+also related: the test assumes a certain floating point output format,
+this assumption fails in UNICOS.
=head2 UNICOS/mk
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;
doesn't work as one would expect: the old value is restored
-incorrectly.
+incorrectly. This will be changed in a future release, but we don't
+know yet which the new semantics will exactly be. In any case the
+change will break existing code that relies on the current
+(ill-defined) semantics, so just avoid doing this in general.
-=head2 Self-tying of Arrays and Hashes Is Forbidden
+=head2 Self-tying Problems
Self-tying of arrays and hashes is broken in rather deep and
hard-to-fix ways. As a stop-gap measure to avoid people from getting
frustrated at the mysterious results (core dumps, most often) it is
for now forbidden (you will get a fatal error even from an attempt).
+Self-tying of globs is broken, but not disabled.
+
+Self-tying of scalars and IO works.
+
=head2 Building Extensions Can Fail Because Of Largefiles
Some extensions like mod_perl are known to have issues with
Though mostly working, Unicode support still has problem spots on
EBCDIC platforms. One such known spot are the C<\p{}> and C<\P{}>
regular expression constructs for code points less than 256: the
-pP are testing for Unicode code points, not knowing about EBCDIC.
+C<pP> are testing for Unicode code points, not knowing about EBCDIC.
-=head2 The Compiler Suite Is Still Experimental
+=head2 The Compiler Suite Is Still Very Experimental
The compiler suite is slowly getting better but it continues to be
highly experimental. Use in production environments is discouraged.
core module. It is still a useful module, though, and is available
from the CPAN.
+Perl 5.8 unfortunately does not build anymore on AmigaOS,
+this broke at some point accidentally. Since there are not that many
+Amiga developers available, we could not get this fixed and tested in
+time for 5.8.0.
+
=head1 Reporting Bugs
If you find what you think is a bug, you might check the articles