Document the DJGPP status.
[p5sagit/p5-mst-13.2.git] / pod / perldelta.pod
index c00b362..12b48cc 100644 (file)
@@ -28,11 +28,11 @@ Better Unicode support
 
 =item *
 
-New Thread Implementation
+New IO Implementation
 
 =item *
 
-Many New Modules
+New Thread Implementation
 
 =item *
 
@@ -44,6 +44,10 @@ Safe Signals
 
 =item *
 
+Many New Modules
+
+=item *
+
 More Extensive Regression Testing
 
 =back
@@ -91,7 +95,7 @@ change will probably break backward compatibility with compiled
 modules.  The change was made to make Perl more compliant with other
 applications like mod_perl which are using the AIX native interface.
 
-=head2 Attributes for C<my> variables now handled at run-time.
+=head2 Attributes for C<my> variables now handled at run-time
 
 The C<my EXPR : ATTRS> syntax now applies variable attributes at
 run-time.  (Subroutine and C<our> variables still get attributes applied
@@ -114,6 +118,24 @@ point format on OpenVMS Alpha, potentially breaking binary compatibility
 with external libraries or existing data.  G_FLOAT is still available as
 a configuration option.  The default on VAX (D_FLOAT) has not changed.
 
+=head2 New Unicode Semantics (no more C<use utf8>, almost)
+
+Previously in Perl 5.6 to use Unicode one would say "use utf8" and
+then the operations (like string concatenation) were Unicode-aware
+in that lexical scope.
+
+This was found to be an inconvenient interface, and in Perl 5.8 the
+Unicode model has completely changed: now the "Unicodeness" is bound
+to the data itself, and for most of the time "use utf8" is not needed
+at all.  The only remaining use of "use utf8" is when the Perl script
+itself has been written in the UTF-8 encoding of Unicode.  (UTF-8 has
+not been made the default since there are many Perl scripts out there
+that are using various national eight-bit character sets, which would
+be illegal in UTF-8.)
+
+See L<perluniintro> for the explanation of the current model,
+and L<utf8> for the current use of the utf8 pragma.
+
 =head2 New Unicode Properties
 
 Unicode I<scripts> are now supported. Scripts are similar to (and superior
@@ -153,6 +175,13 @@ for better use: now they stand for long double (if supported by the
 platform) and NV (Perl internal floating point type).  (They used
 to be aliases for d/f, but you never knew that.)
 
+=head2 glob() now returns filenames in alphabetical order
+
+The list of filenames from glob() (or <...>) is now by default sorted
+alphabetically to be csh-compliant (which is what happened before
+in most UNIX platforms).  (bsd_glob() does still sort platform
+natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.) [561]
+
 =head2 Deprecations
 
 =over 4
@@ -189,27 +218,7 @@ any C<\w> character.
 
 =item *
 
-The list of filenames from glob() (or <...>) is now by default sorted
-alphabetically to be csh-compliant (which is what happened before
-in most UNIX platforms).  (bsd_glob() does still sort platform
-natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.) [561]
-
-=item *
-
-Spurious syntax errors generated in certain situations, when glob()
-caused File::Glob to be loaded for the first time, have been fixed. [561]
-
-=item *
-
-Although "you shouldn't do that", it was possible to write code that
-depends on Perl's hashed key order (Data::Dumper does this).  The new
-algorithm "One-at-a-Time" produces a different hashed key order.
-More details are in L</"Performance Enhancements">.
-
-=item *
-
-lstat(FILEHANDLE) now gives a warning because the operation makes no sense.
-In future releases this may become a fatal error.
+The *glob{FILEHANDLE} is deprecated, use *glob{IO} instead.
 
 =item *
 
@@ -233,6 +242,19 @@ source code level, this shouldn't be that drastic a change.
 
 =item *
 
+Previous versions of perl and some readings of some sections of Camel
+III implied that the C<:raw> "discipline" was the inverse of C<:crlf>.
+Turning off "clrfness" is no longer enough to make a stream truly
+binary. So the PerlIO C<:raw> layer (or "discipline", to use the Camel
+book's older terminology) is now formally defined as being equivalent
+to binmode(FH) - which is in turn defined as doing whatever is
+necessary to pass each byte as-is without any translation.  In
+particular binmode(FH) - and hence C<:raw> - will now turn off both
+CRLF and UTF-8 translation and remove other layers (e.g. :encoding())
+which would modify byte stream.
+
+=item *
+
 The current user-visible implementation of pseudo-hashes (the weird
 use of the first array element) is deprecated starting from Perl 5.8.0
 and will be removed in Perl 5.10.0, and the feature will be
@@ -240,7 +262,9 @@ implemented differently.  Not only is the current interface rather
 ugly, but the current implementation slows down normal array and hash
 use quite noticeably. The C<fields> pragma interface will remain
 available.  The I<restricted hashes> interface is expected to
-be the replacement interface (see L<Hash::Util>).
+be the replacement interface (see L<Hash::Util>).  If your existing
+programs depends on the underlying implementation, consider using
+L<Class::PseudoHash> from CPAN.
 
 =item *
 
@@ -280,8 +304,8 @@ release.
 
 =item *
 
-The C<exec LIST> and C<system LIST> operations will produce fatal
-errors on tainted data in some future release.
+The C<exec LIST> and C<system LIST> operations now produce warnings on
+tainted data and in some future release they will produce fatal errors.
 
 =item *
 
@@ -293,6 +317,42 @@ behaviour. See L<"Localising Tied Arrays and Hashes Is Broken">.
 
 =head1 Core Enhancements
 
+=head2 Unicode Overhaul
+
+Unicode in general should be now much more usable than in Perl 5.6.0
+(or even in 5.6.1).  Unicode can be used in hash keys, Unicode in
+regular expressions should work now, Unicode in tr/// should work now,
+Unicode in I/O should work now.  See L<perluniintro> for introduction
+and L<perlunicode> for details.
+
+=over 4
+
+=item *
+
+The Unicode Character Database coming with Perl has been upgraded
+to Unicode 3.2.0.  For more information, see http://www.unicode.org/ .
+[561+] (5.6.1 has UCD 3.0.1.)
+
+=item *
+
+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
+considerations, is the Unihan database.
+
+=item *
+
+The properties \p{Blank} and \p{SpacePerl} have been added. "Blank" is like
+C isblank(), that is, it contains only "horizontal whitespace" (the space
+character is, the newline isn't), and the "SpacePerl" is the Unicode
+equivalent of C<\s> (\p{Space} isn't, since that includes the vertical
+tabulator character, whereas C<\s> doesn't.)
+
+See "New Unicode Properties" earlier in this document for additional
+information on changes with Unicode properties.
+
+=back
+
 =head2 PerlIO is Now The Default
 
 =over 4
@@ -323,6 +383,17 @@ of PerlIO on your architecture name.
 
 =item *
 
+If your platform supports fork(), you can use the list form of C<open>
+for pipes.  For example:
+
+    open KID_PS, "-|", "ps", "aux" or die $!;
+
+forks the ps(1) command (without spawning a shell, as there are more
+than three arguments to open()), and reads its standard output via the
+C<KID_PS> filehandle.  See L<perlipc>.
+
+=item *
+
 File handles can be marked as accepting Perl's internal encoding of Unicode
 (UTF-8 or UTF-EBCDIC depending on platform) by a pseudo layer ":utf8" :
 
@@ -339,10 +410,10 @@ for more information about UTF-8.
 
 If your environment variables (LC_ALL, LC_CTYPE, LANG, LANGUAGE) look
 like you want to use UTF-8 (any of the the variables match C</utf-?8/i>),
-your STDIN, STDOUT, STDERR handles and the default open discipline
+your STDIN, STDOUT, STDERR handles and the default open layer
 (see L<open>) are marked as UTF-8.  (This feature, like other new
 features that combine Unicode and I/O, work only if you are using
-PerlIO, but that's is the default.)
+PerlIO, but that's the default.)
 
 Note that after this Perl really does assume that everything is UTF-8:
 for example if some input handle is not, Perl will probably very soon
@@ -375,23 +446,19 @@ Anonymous temporary files are available without need to
 
 That is a literal undef, not an undefined value.
 
-=item *
-
-The list form of C<open> is now implemented for pipes (at least on UNIX):
-
-   open($fh,"-|", 'cat', '/etc/motd')
-
-creates a pipe, and runs the equivalent of exec('cat', '/etc/motd') in
-the child process.
+=back
 
-=item *
+=head2 ithreads
 
-If your locale environment variables (LANGUAGE, LC_ALL, LC_CTYPE, LANG)
-contain the strings 'UTF-8' or 'UTF8' (case-insensitive matching),
-the default encoding of your STDIN, STDOUT, and STDERR, and of
-B<any subsequent file open>, is UTF-8.
+The new interpreter threads ("ithreads" for short) implementation of
+multithreading, by Arthur Bergman, replaces the old "5.005 threads"
+implementation.  In the ithreads model any data sharing between
+threads must be explicit, as opposed to the model where data sharing
+was implicit.  See L<threads> and L<threads::shared>, and
+L<perlthrtut>.
 
-=back
+As a part of the ithreads implementation Perl will also use
+any necessary and detectable reentrant libc interfaces.
 
 =head2 Restricted Hashes
 
@@ -415,42 +482,6 @@ internal state since the current operation is always finished first,
 but the signal may take more time to get heard.  Note that breaking
 out from potentially blocking operations should still work, though.
 
-=head2 Unicode Overhaul
-
-Unicode in general should be now much more usable than in Perl 5.6.0
-(or even in 5.6.1).  Unicode can be used in hash keys, Unicode in
-regular expressions should work now, Unicode in tr/// should work now,
-Unicode in I/O should work now.  See L<perluniintro> for introduction
-and L<perlunicode> for details.
-
-=over 4
-
-=item *
-
-The Unicode Character Database coming with Perl has been upgraded
-to Unicode 3.2.0.  For more information, see http://www.unicode.org/ .
-[561+] (5.6.1 has UCD 3.0.1.)
-
-=item *
-
-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
-considerations, is the Unihan database.
-
-=item *
-
-The properties \p{Blank} and \p{SpacePerl} have been added. "Blank" is like
-C isblank(), that is, it contains only "horizontal whitespace" (the space
-character is, the newline isn't), and the "SpacePerl" is the Unicode
-equivalent of C<\s> (\p{Space} isn't, since that includes the vertical
-tabulator character, whereas C<\s> doesn't.)
-
-See "New Unicode Properties" earlier in this document for additional
-information on changes with Unicode properties.
-
-=back
-
 =head2 Understanding of Numbers
 
 In general a lot of fixing has happened in the area of Perl's
@@ -561,6 +592,23 @@ Formats now support zero-padded decimal fields.
 
 =item *
 
+Although "you shouldn't do that", it was possible to write code that
+depends on Perl's hashed key order (Data::Dumper does this).  The new
+algorithm "One-at-a-Time" produces a different hashed key order.
+More details are in L</"Performance Enhancements">.
+
+=item *
+
+lstat(FILEHANDLE) now gives a warning because the operation makes no sense.
+In future releases this may become a fatal error.
+
+=item *
+
+Spurious syntax errors generated in certain situations, when glob()
+caused File::Glob to be loaded for the first time, have been fixed. [561]
+
+=item *
+
 Lvalue subroutines can now return C<undef> in list context.  However,
 the lvalue subroutine feature still remains experimental.  [561+]
 
@@ -737,7 +785,8 @@ See L<perlmod>
 
 =item *
 
-C<Attribute::Handlers> allows a class to define attribute handlers.
+C<Attribute::Handlers>, originally by Damian Conway and now maintained
+by Arthur Bergman, allows a class to define attribute handlers.
 
     package MyPack;
     use Attribute::Handlers;
@@ -801,6 +850,8 @@ RFC 1321, from Gisle Aas, has been added.  See L<Digest::MD5>.
 NOTE: the C<MD5> backward compatibility module is deliberately not
 included since its further use is discouraged.
 
+See also L<PerlIO::via::QuotedPrint>.
+
 =item *
 
 C<Encode>, originally by Nick Ing-Simmons and now maintained by Dan
@@ -959,13 +1010,7 @@ in quoted-printable encoding, as defined in RFC 2045 - I<MIME
 
     print $encoded, "\n"; # "Smiley in Unicode: =263A"
 
-MIME::QuotedPrint has been enhanced to provide the basic methods
-necessary to use it with PerlIO::Via as in :
-
-    use MIME::QuotedPrint;
-    open($fh,">Via(MIME::QuotedPrint)",$path);
-
-See L<MIME::QuotedPrint>.
+See also L<PerlIO::via::QuotedPrint>.
 
 =item *
 
@@ -974,27 +1019,32 @@ See L<NEXT>.
 
 =item *
 
-C<open> is a new pragma for setting the default I/O disciplines
+C<open> is a new pragma for setting the default I/O layers
 for open().
 
 =item *
 
-C<PerlIO::Scalar>, by Nick Ing-Simmons, provides the implementation
+C<PerlIO::scalar>, by Nick Ing-Simmons, provides the implementation
 of IO to "in memory" Perl scalars as discussed above.  It also serves
 as an example of a loadable PerlIO layer.  Other future possibilities
-include PerlIO::Array and PerlIO::Code.  See L<PerlIO::Scalar>.
+include PerlIO::Array and PerlIO::Code.  See L<PerlIO::scalar>.
 
 =item *
 
-C<PerlIO::Via>, by Nick Ing-Simmons, acts as a PerlIO layer and wraps
+C<PerlIO::via>, by Nick Ing-Simmons, acts as a PerlIO layer and wraps
 PerlIO layer functionality provided by a class (typically implemented
-in perl code).
+in Perl code).
 
-    use MIME::QuotedPrint;
-    open($fh,">Via(MIME::QuotedPrint)",$path);
+=item *
 
-This will automatically convert everything output to C<$fh>
-to Quoted-Printable.  See L<PerlIO::Via>.
+C<PerlIO::via::QuotedPrint>, by Elizabeth Mattijsen, is an example
+of a C<PerlIO::via> class:
+
+    use PerlIO::via::QuotedPrint;
+    open($fh,">:via(QuotedPrint)",$path);
+
+This will automatically convert everything output to C<$fh> to
+Quoted-Printable.  See L<PerlIO::via> and L<PerlIO::via::QuotedPrint>.
 
 =item *
 
@@ -1022,7 +1072,7 @@ C<sort> is a new pragma for controlling the behaviour of sort().
 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.  Because in effect Storable does serialisation
-of Perl data structues, with it you can also clone deep, hierarchical
+of Perl data structures, with it you can also clone deep, hierarchical
 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
@@ -1092,9 +1142,7 @@ L<threads::shared>, and L<perlthrtut>.
 =item *
 
 C<threads::shared>, by Arthur Bergman, allows data sharing for
-interpreter threads.  In the ithreads model any data sharing between
-threads must be explicit, as opposed to the old 5.005 thread model
-where data sharing was implicit.  See L<threads::shared>.
+interpreter threads.  See L<threads::shared>.
 
 =item *
 
@@ -1226,6 +1274,20 @@ C<@LAST_MATCH_END> English aliases for C<@-> and C<@+>.
 
 =item *
 
+ExtUtils::MakeMaker has been significantly cleaned up and fixed.
+The enhanced version has also been backported to earlier releases
+of Perl and submitted to CPAN so that the earlier releases can
+enjoy the fixes.
+
+=item *
+
+The arguments of WriteMakefile() in Makefile.PL are now checked
+for sanity much more carefully than before.  This may cause new
+warnings when modules are being installed.  See L<ExtUtils::MakeMaker>
+for more details.
+
+=item *
+
 ExtUtils::MakeMaker now uses File::Spec internally, which hopefully
 leads to better portability.
 
@@ -1886,8 +1948,9 @@ The Thread extension is now not built at all under ithreads
 (C<Configure -Duseithreads>) because it wouldn't work anyway (the
 Thread extension requires being Configured with C<-Duse5005threads>).
 
-But note that the Thread.pm interface is now shared by both
-thread models.
+B<Note that the 5.005 threads are unsupported and deprecated: if you
+have code written for the old threads you should migrate it to the
+new ithreads model.>
 
 =item *
 
@@ -1938,8 +2001,8 @@ See L<perldgux>.
 
 =item *
 
-The DYNIX/ptx platform (a.k.a. dynixptx) is supported at or near
-osvers 4.5.2.
+The DYNIX/ptx platform (also known as dynixptx) is supported at or
+near osvers 4.5.2.
 
 =item *
 
@@ -2067,10 +2130,6 @@ Perl consistently handles such strings as zero in numeric contexts.
 
 =item *
 
-The order of DESTROYs has been made more predictable.
-
-=item *
-
 Several debugger fixes: exit code now reflects the script exit code,
 condition C<"0"> now treated correctly, the C<d> command now checks
 line number, C<$.> no longer gets corrupted, and all debugger output
@@ -2078,6 +2137,30 @@ now goes correctly to the socket if RemotePort is set. [561]
 
 =item *
 
+The debugger (perl5db.pl) has been modified to present a more
+consistent commands interface, via (CommandSet=580).  perl5db.t was
+also added to test the changes, and as a placeholder for further tests.
+
+See L<perldebug>.
+
+=item *
+
+The debugger has a new C<dumpDepth> option to control the maximum
+depth to which nested structures are dumped.  The C<x> command has
+been extended so that C<x N EXPR> dumps out the value of I<EXPR> to a
+depth of at most I<N> levels.
+
+=item *
+
+The debugger can now show lexical variables if you have the CPAN
+module PadWalker installed.
+
+=item *
+
+The order of DESTROYs has been made more predictable.
+
+=item *
+
 Perl 5.6.0 could emit spurious warnings about redefinition of
 dl_error() when statically building extensions into perl.
 This has been corrected. [561]
@@ -2742,16 +2825,40 @@ A socket handle leak in accept() has been fixed. [561]
 
 =head1 New or Changed Diagnostics
 
+Please see L<perldiag> for more details.
+
 =over 4
 
 =item *
 
+Ambiguous range in the transliteration operator (like a-z-9) now
+gives a warning.
+
+=item *
+
+Two new debugging options have been added: if you have compiled your
+Perl with debugging, you can use the -DT [561] and -DR options to trace
+tokenising and to add reference counts to displaying variables,
+respectively.
+
+=item *
+
 The lexical warnings category "deprecated" is no longer a sub-category
 of the "syntax" category. It is now a top-level category in its own
 right.
 
 =item *
 
+Unadorned dump() will now give a warning suggesting to
+use explicit CORE::dump() if that's what really is meant.
+
+=item *
+
+The "Unrecognized escape" warning has been extended to include C<\8>,
+C<\9>, and C<\_>.  There is no need to escape any of the C<\w> characters.
+
+=item *
+
 All regular expression compilation error messages are now hopefully
 easier to understand both because the error message now comes before
 the failed regex and because the point of failure is now clearly
@@ -2759,41 +2866,46 @@ marked by a C<E<lt>-- HERE> marker.
 
 =item *
 
-The various "opened only for", "on closed", "never opened" warnings
-drop the C<main::> prefix for filehandles in the C<main> package,
-for example C<STDIN> instead of C<main::STDIN>.
+Various I/O (and socket) functions like binmode(), close(), and so
+forth now more consistently warn if they are used illogically either
+on a yet unopened or on an already closed filehandle (or socket).
 
 =item *
 
-The "Unrecognized escape" warning has been extended to include C<\8>,
-C<\9>, and C<\_>.  There is no need to escape any of the C<\w> characters.
+Using lstat() on a filehandle now gives a warning.  (It's a non-sensical
+thing to do.)
 
 =item *
 
-Two new debugging options have been added: if you have compiled your
-Perl with debugging, you can use the -DT [561] and -DR options to trace
-tokenising and to add reference counts to displaying variables,
-respectively.
+The C<-M> and C<-m> options now warn if you didn't supply the module name.
 
 =item *
 
-The debugger (perl5db.pl) has been modified to present a more
-consistent commands interface, via (CommandSet=580).  perl5db.t was
-also added to test the changes, and as a placeholder for further tests.
+If you in C<use> specify a required minimum version, modules matching
+the name and but not defining a $VERSION will cause a fatal failure.
 
-See L<perldebug>.
+=item *
+
+Using negative offset for vec() in lvalue context is now a warnable offense.
 
 =item *
 
-The debugger has a new C<dumpDepth> option to control the maximum
-depth to which nested structures are dumped.  The C<x> command has
-been extended so that C<x N EXPR> dumps out the value of I<EXPR> to a
-depth of at most I<N> levels.
+Odd number of arguments to oveload::constant now elicits a warning.
 
 =item *
 
-The debugger can now show lexical variables if you have the CPAN
-module PadWalker installed.
+Odd number of elements to in anonymous hash now elicits a warning.
+
+=item *
+
+The various "opened only for", "on closed", "never opened" warnings
+drop the C<main::> prefix for filehandles in the C<main> package,
+for example C<STDIN> instead of C<main::STDIN>.
+
+=item *
+
+Subroutine prototypes are now checked more carefully, you may
+get warnings for example if you have used non-prototype characters.
 
 =item *
 
@@ -2814,20 +2926,75 @@ for the C<"c"> format and a number less than -128 or more than 127.
 
 =item *
 
+pack C<P> format now demands an explicit size.
+
+=item *
+
+unpack C<w> now warns of unterminated compressed integers.
+
+=item *
+
+Warnings relating to the use of PerlIO have been added.
+
+=item *
+
 Certain regex modifiers such as C<(?o)> make sense only if applied to
 the entire regex.  You will get an optional warning if you try to do
 otherwise.
 
 =item *
 
+Variable length lookbehind has not yet been implemented, trying to
+use it will tell that.
+
+=item *
+
 Using arrays or hashes as references (e.g. C<< %foo->{bar} >>
 has been deprecated for a while.  Now you will get an optional warning.
 
 =item *
 
+Warnings relating to the use of the new restricted hashes feature
+have been added.
+
+=item *
+
+Self-ties of arrays and hashes are not supported and fatal errors
+will happen even at an attempt to do so.
+
+=item *
+
 Using C<sort> in scalar context now issues an optional warning.
 This didn't do anything useful, as the sort was not performed.
 
+=item *
+
+Using the /g modifier in split() is meaningless and will cause a warning.
+
+=item *
+
+Using splice() past the end of an array now causes a warning.
+
+=item *
+
+Malformed Unicode encodings (UTF-8 and UTF-16) cause a lot of warnings,
+ad doestrying to use UTF-16 surrogates (which are unimplemented).
+
+=item *
+
+Trying to use Unicode characters on an I/O stream without marking the
+stream's encoding (using open() or binmode()) will cause "Wide character"
+warnings.
+
+=item *
+
+Use of v-strings in use/require causes a (backward) portability warning.
+
+=item *
+
+Warnings relating to the use interpreter threads and their shared data
+have been added.
+
 =back
 
 =head1 Changed Internals
@@ -2836,6 +3003,10 @@ This didn't do anything useful, as the sort was not performed.
 
 =item *
 
+PerlIO is now the default.
+
+=item *
+
 perlapi.pod (a companion to perlguts) now attempts to document the
 internal API.
 
@@ -2912,6 +3083,8 @@ There are now several profiling make targets.
 =head1 Security Vulnerability Closed [561]
 
 (This change was already made in 5.7.0 but bears repeating here.)
+(5.7.0 came out before 5.6.1: the development branch 5.7 released
+earlier than the maintenance branch 5.6)
 
 A potential security vulnerability in the optional suidperl component
 of Perl was identified in August 2000.  suidperl is neither built nor
@@ -2941,12 +3114,13 @@ such as sudo ( see http://www.courtesan.com/sudo/ ).
 
 =head1 New Tests
 
-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.
+Several new tests have been added, especially for the F<lib> and
+F<ext> subsections.  There are now about 69 000 individual tests
+(spread over about 700 test scripts), in the regression suite (5.6.1
+has about 11 700 tests, in 258 test scripts)  The exact numbers depend
+on the platform and Perl configuration used.  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
@@ -2960,6 +3134,164 @@ to be closer to the library/extension they are testing.)
 
 =head1 Known Problems
 
+=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.
+
+=head2 Localising Tied Arrays and Hashes Is Broken
+
+    local %tied_array;
+
+doesn't work as one would expect: the old value is restored
+incorrectly.  This will be changed in a future release, but we don't
+know yet what 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 Building Extensions Can Fail Because Of Largefiles
+
+Some extensions like mod_perl are known to have issues with
+`largefiles', a change brought by Perl 5.6.0 in which file offsets
+default to 64 bits wide, where supported.  Modules may fail to compile
+at all, or they may compile and work incorrectly.  Currently, there
+is no good solution for the problem, but Configure now provides
+appropriate non-largefile ccflags, ldflags, libswanted, and libs
+in the %Config hash (e.g., $Config{ccflags_nolargefiles}) so the
+extensions that are having problems can try configuring themselves
+without the largefileness.  This is admittedly not a clean solution,
+and the solution may not even work at all.  One potential failure is
+whether one can (or, if one can, whether it's a good idea to) link
+together at all binaries with different ideas about file offsets;
+all this is platform-dependent.
+
+=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.
+
+=head2 lib/ftmp-security tests warn 'system possibly insecure'
+
+Don't panic.  Read the 'make test' section of INSTALL instead.
+
+=head2 libwww-perl (LWP) fails base/date #51
+
+Use libwww-perl 5.65 or later.
+
+=head2 PDL failing some tests
+
+Use PDL 2.3.4 or later.
+
+=head2 Perl_get_sv
+
+You may get errors like 'Undefined symbol "Perl_get_sv"' or "can't
+resolve symbol 'Perl_get_sv'", or the symbol may be "Perl_sv_2pv".
+This probably means that you are trying to use an older shared Perl
+library (or extensions linked with such) with Perl 5.8.0 executable.
+Perl used to have such a subroutine, but that is no more the case.
+Check your shared library path, and any shared Perl libraries in those
+directories.
+
+Sometimes this problem may also indicate a partial Perl 5.8.0
+installation, see L</"Mac OS X dyld undefined symbols"> for an
+example and how to deal with it.
+
+=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
+forbidden for now (you will get a fatal error even from an attempt).
+
+A change to self-tying of globs has caused them to be recursively
+referenced (see: L<perlobj/"Two-Phased Garbage Collection">).  You
+will now need an explicit untie to destroy a self-tied glob.  This
+behaviour may be fixed at a later date.
+
+Self-tying of scalars and IO thingies works.
+
+=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 Failure of Thread (5.005-style) tests
+
+B<Note that support for 5.005-style threading is deprecated,
+experimental and practically unsupported.  In 5.10, it is expected
+to be removed.  You should migrate your code to ithreads.>
+
+The following tests are known to fail due to fundamental problems in
+the 5.005 threading implementation. These are not new failures--Perl
+5.005_0x has the same bugs, but didn't have these tests.
+
+ ../ext/B/t/xref.t                    255 65280    14   12  85.71%  3-14
+ ../ext/List/Util/t/first.t           255 65280     7    4  57.14%  2 5-7
+ ../lib/English.t                       2   512    54    2   3.70%  2-3
+ ../lib/FileCache.t                                 5    1  20.00%  5
+ ../lib/Filter/Simple/t/data.t                      6    3  50.00%  1-3
+ ../lib/Filter/Simple/t/filter_only.                9    3  33.33%  1-2 5
+ ../lib/Math/BigInt/t/bare_mbf.t                 1627    4   0.25%  8 11 1626-1627
+ ../lib/Math/BigInt/t/bigfltpm.t                 1629    4   0.25%  10 13 1628-
+                                                                    1629
+ ../lib/Math/BigInt/t/sub_mbf.t                  1633    4   0.24%  8 11 1632-1633
+ ../lib/Math/BigInt/t/with_sub.t                 1628    4   0.25%  9 12 1627-1628
+ ../lib/Tie/File/t/31_autodefer.t     255 65280    65   32  49.23%  34-65
+ ../lib/autouse.t                                  10    1  10.00%  4
+ op/flip.t                                         15    1   6.67%  15
+
+These failures are unlikely to get fixed as 5.005-style threads
+are considered fundamentally broken.  (Basically what happens is that
+competing threads can corrupt shared global state, one good example
+being regular expression engine's state.)
+
+=head2 Timing problems
+
+The following tests may fail intermittently because of timing
+problems, for example if the system is heavily loaded.
+
+    t/op/alarm.t
+    ext/Time/HiRes/HiRes.t
+    lib/Benchmark.t
+    lib/Memoize/t/expmod_t.t
+    lib/Memoize/t/speed.t
+
+In case of failure please try running them manually, for example
+
+    ./perl -Ilib ext/Time/HiRes/HiRes.t
+
+=head2 Tied/Magical Array/Hash Elements Do Not Autovivify
+
+For normal arrays C<$foo = \$bar[1]> will assign C<undef> to
+C<$bar[1]> (assuming that it didn't exist before), but for
+tied/magical arrays and hashes such autovivification does not happen
+because there is currently no way to catch the reference creation.
+The same problem affects slicing over non-existent indices/keys of
+a tied/magical array/hash.
+
+=head2 Unicode in package/class and subroutine names does not work
+
+One can have Unicode in identifier names, but not in package/class or
+subroutine names.  While some limited functionality towards this does
+exist as of Perl 5.8.0, that is more accidental than designed; use of
+Unicode for the said purposes is unsupported.
+
+One reason of this unfinishedness is its (currently) inherent
+unportability: since both package names and subroutine names may
+need to be mapped to file and directory names, the Unicode capability
+of the filesystem becomes important-- and there unfortunately aren't
+portable answers.
+
+=head1 Platform Specific Problems
+
 =head2 AIX
 
 =over 4
@@ -3025,6 +3357,8 @@ The following tests fail on 5.8.0 Perl in BeOS Personal 5.03:
 
  t/op/lfs............................FAILED at test 17
  t/op/magic..........................FAILED at test 24
+ ext/Fcntl/t/syslfs..................FAILED at test 17
+ ext/File/Glob/t/basic...............FAILED at test 3
  ext/POSIX/t/sigaction...............FAILED at test 13
  ext/POSIX/t/waitpid.................FAILED at test 1
 
@@ -3037,46 +3371,69 @@ you may get an error message saying "unable to remap".
 This is known problem with Cygwin, and a workaround is
 detailed in here: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html
 
-=head2 ext/threads/t/libc
+=head2 Cygwin ndbm tests fail on FAT
 
-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.
+One can build but not install (or test the build of) the NDBM_File
+on FAT filesystems.  Installation (or build) on NTFS works fine.
+If one attempts the test on a FAT install (or build) the following
+failures are expected:
 
-=head2 FreeBSD built with ithreads coredumps reading large directories
+ ../ext/NDBM_File/ndbm.t       13  3328    71   59  83.10%  1-2 4 16-71
+ ../ext/ODBM_File/odbm.t      255 65280    ??   ??       %  ??
+ ../lib/AnyDBM_File.t           2   512    12    2  16.67%  1 4
+ ../lib/Memoize/t/errors.t      0   139    11    5  45.45%  7-11
+ ../lib/Memoize/t/tie_ndbm.t   13  3328     4    4 100.00%  1-4
+ run/fresh_perl.t                          97    1   1.03%  91
 
-This is a known bug in FreeBSD's readdir_r() (see L<perlfreebsd>
-(README.freebsd)), which hopefully will be fixed in FreeBSD 4.6.
+NDBM_File fails and ODBM_File just coredumps.
 
-=head2 FreeBSD Failing locale Test 117 For ISO8859-15 Locales
+=head2 DJGPP Failures
 
-The ISO8859-15 locales may fail the locale test 117 in FreeBSD.
-This is caused by the characters \xFF (y with diaeresis) and \xBE
-(Y with diaeresis) not behaving correctly when being matched
-case-insensitively.
+ t/op/stat............................FAILED at test 29
+ lib/File/Find/t/find.................FAILED at test 1
+ lib/File/Find/t/taint................FAILED at test 1
+ lib/h2xs.............................FAILED at test 15
+ lib/Pod/t/eol........................FAILED at test 1
+ lib/Test/Harness/t/strap-analyze.....FAILED at test 8
+ lib/Test/Harness/t/test-harness......FAILED at test 23
+ lib/Test/Simple/t/exit...............FAILED at test 1
 
-=head2 IRIX fails ext/List/Util/t/shuffle.t
+The above failures are known as of 5.8.0 with native builds with long
+filenames, but there are a few more if running under dosemu because of
+limitations (and maybe bugs) of dosemu:
 
-IRIX with MIPSpro 7.3.1.3m compiler may fail the said List::Util test
-by dumping core.  This seems to be a compiler error since if compiled
-with gcc no core dump ensues, and no failures on the said test on any
-other platform.
+ t/comp/cpp...........................FAILED at test 3
+ t/op/inccode.........................(crash)
 
-=head2 Modifying $_ Inside for(..)
+and a few lib/ExtUtils tests, and several hundred Encode/t/Aliases.t
+failures that work fine with long filenames.  So you really might
+prefer native builds and long filenames.
 
-   for (1..5) { $_++ }
+=head2 FreeBSD built with ithreads coredumps reading large directories
 
-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.
+This is a known bug in FreeBSD 4.5's readdir_r(), it has been fixed in
+FreeBSD 4.6 (see L<perlfreebsd> (README.freebsd)).
 
-=head2 mod_perl 1.26 Doesn't Build With Threaded Perl
+=head2 FreeBSD Failing locale Test 117 For ISO 8859-15 Locales
 
-Use mod_perl 1.27 or higher.
+The ISO 8859-15 locales may fail the locale test 117 in FreeBSD.
+This is caused by the characters \xFF (y with diaeresis) and \xBE
+(Y with diaeresis) not behaving correctly when being matched
+case-insensitively.  Apparently this problem has been fixed in
+the latest FreeBSD releases.
+( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308 )
 
-=head2 lib/ftmp-security tests warn 'system possibly insecure'
+=head2 IRIX fails ext/List/Util/t/shuffle.t or Digest::MD5
 
-Don't panic.  Read the 'make test' section of INSTALL instead.
+IRIX with MIPSpro 7.3.1.2m or 7.3.1.3m compiler may fail the List::Util
+test ext/List/Util/t/shuffle.t by dumping core.  This seems to be
+a compiler error since if compiled with gcc no core dump ensues, and
+no failures have been seen on the said test on any other platform.
+
+Similarly, building the Digest::MD5 extension has been
+known to fail with "*** Termination code 139 (bu21)".
+
+The cure is to drop optimization level (Configure -Doptimize=-O2).
 
 =head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured
 
@@ -3094,10 +3451,6 @@ This is a known bug in the glibc 2.2.5 with long long integers.
 
 No known fix.
 
-=head2 libwww-perl (LWP) fails base/date #51
-
-Use libwww-perl 5.65 or later.
-
 =head2 Mac OS X
 
 Please remember to set your environment variable LC_ALL to "C"
@@ -3125,24 +3478,47 @@ this is 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 Mac OS X dyld undefined symbols
+
+If after installing Perl 5.8.0 you are getting warnings about missing
+symbols, for example
+
+    dyld: perl Undefined symbols
+    _perl_sv_2pv
+    _perl_get_sv
+
+you probably have an old pre-Perl-5.8.0 installation (or parts of one)
+in /Library/Perl (the undefined symbols used to exist in pre-5.8.0 Perls).
+It seems that for some reason "make install" doesn't always completely
+overwrite the files in /Library/Perl.  You can move the old Perl
+shared library out of the way like this:
+
+    cd /Library/Perl/darwin/CORE
+    mv libperl.dylib libperlold.dylib
+
+and then reissue "make install".  Note that the above of course is
+extremely disruptive for anything using the /usr/local/bin/perl.
+If that doesn't help, you may have to try removing all the .bundle
+files from beneath /Library/Perl, and again "make install"-ing.
+
 =head2 OS/2 Test Failures
 
 The following tests are known to fail on OS/2 (for clarity
 only the failures are shown, not the full error messages):
 
-t/io/utf8............................FAILED at test 19
-t/op/grent...........................FAILED at test 2
-t/op/pwent...........................FAILED at test 1
-t/lib/os2_base.......................FAILED at test 13
-t/lib/os2_process....................FAILED at test 10
-t/lib/os2_process_kid................FAILED at test 10
-t/lib/rx_cmprt.......................FAILED at test 16
-ext/DB_File/t/db-btree...............FAILED at test 0
-ext/DB_File/t/db-hash................FAILED at test 0
-ext/DB_File/t/db-recno...............FAILED at test 0
-lib/ExtUtils/t/basic.................FAILED at test 14
-lib/ExtUtils/t/Constant..............FAILED at test 4
-lib/Memoize/t/errors.................FAILED at test 4
+ t/io/utf8............................FAILED at test 19
+ t/op/grent...........................FAILED at test 2
+ t/op/pwent...........................FAILED at test 1
+ t/lib/os2_base.......................FAILED at test 13
+ t/lib/os2_process....................FAILED at test 10
+ t/lib/os2_process_kid................FAILED at test 10
+ t/lib/rx_cmprt.......................FAILED at test 16
+ ext/DB_File/t/db-btree...............FAILED at test 0
+ ext/DB_File/t/db-hash................FAILED at test 0
+ ext/DB_File/t/db-recno...............FAILED at test 0
+ lib/ExtUtils/t/basic.................FAILED at test 14
+ lib/ExtUtils/t/Constant..............FAILED at test 4
+ lib/Memoize/t/errors.................FAILED at test 4
 
 =head2 op/sprintf tests 91, 129, and 130
 
@@ -3193,54 +3569,10 @@ is serious but as of yet unsolved.  It points at some problems with the
 signedness handling of the C compiler, as do the 64bitint, arith, and pow
 failures.  Most of the rest point at problems with SysV IPC.
 
-=head2 PDL failing some tests
-
-Use PDL 2.3.4 or later.
-
 =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,
-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
-5.005_0x has the same bugs, but didn't have these tests.
-
- ../ext/B/t/xref.t                  255 65280    14   12  85.71%  3-14
- ../ext/List/Util/t/first.t         255 65280     7    4  57.14%  2 5-7
- ../lib/English.t                     2   512    54    2   3.70%  2-3
- ../lib/ExtUtils/t/basic.t            1   256    17    1   5.88%  14
- ../lib/FileCache.t                               5    1  20.00%  5
- ../lib/Filter/Simple/t/data.t                    6    3  50.00%  1-3
- ../lib/Filter/Simple/t/filter_onl                9    3  33.33%  1-2 5
- ../lib/Tie/File/t/31_autodefer.t   255 65280    65   32  49.23%  34-65
- ../lib/autouse.t                                10    1  10.00%  4
- op/flip.t                                       15    1   6.67%  15
-
-These failures are unlikely to get fixed as 5.005-style threads
-are considered fundamentally broken.  (Basically what happens is that
-competing threads can corrupt shared global state.)
-
-=head2 Timing problems
-
-The following tests may fail intermittently because of timing
-problems, for example if the system is heavily loaded.
-
-    t/op/alarm.t
-    ext/Time/HiRes/HiRes.t
-    lib/Benchmark.t
-    lib/Memoize/t/expmod_t.t
-    lib/Memoize/t/speed.t
-
-In case of failure please try running them manually, for example
-
-    ./perl -Ilib ext/Time/HiRes/HiRes.t
-
 =head2 UNICOS/mk
 
 =over 4
@@ -3307,7 +3639,7 @@ Use XML::Parser 2.31 or later.
 
 =head2 z/OS (OS/390)
 
-z/OS has rather many test failures but the situation is actually
+z/OS has rather many test failures but the situation is actually much
 better than it was in 5.6.0; it's just that so many new modules and
 tests have been added.
 
@@ -3320,7 +3652,7 @@ tests have been added.
                                                               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                                   910    7   0.77%  665 776 785 832-
+ op/pat.t                                   922    7   0.76%  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
@@ -3328,61 +3660,12 @@ tests have been added.
                                                               710-711
 
 The failures in dumper.t and downgrade.t are problems in the tests,
-those in io_unix and sprintf are problems in the USS (UDP sockets
-and printf formats).  The pat, tr, and fold failures are genuine Perl
+those in io_unix and sprintf are problems in the USS (UDP sockets and
+printf formats).  The pat, tr, and fold failures 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.  This will be changed in a future release, but we don't
-know yet what 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 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
-forbidden for now (you will get a fatal error even from an attempt).
-
-A change to self-tying of globs has caused them to be recursively
-referenced (see: L<perlobj/"Two-Phased Garbage Collection">).  You
-will now need an explicit untie to destroy a self-tied glob.  This
-behaviour may be fixed at a later date.
-
-Self-tying of scalars and IO thingies works.
-
-=head2 Tied/Magical Array/Hash Elements Do Not Autovivify
-
-For normal arrays C<$foo = \$bar[1]> will assign C<undef> to
-C<$bar[1]> (assuming that it didn't exist before), but for
-tied/magical arrays and hashes such autovivification does not happen
-because there is currently no way to catch the reference creation.
-The same problem affects slicing over non-existent indices/keys of
-a tied/magical array/hash.
-
-=head2 Building Extensions Can Fail Because Of Largefiles
-
-Some extensions like mod_perl are known to have issues with
-`largefiles', a change brought by Perl 5.6.0 in which file offsets
-default to 64 bits wide, where supported.  Modules may fail to compile
-at all, or they may compile and work incorrectly.  Currently, there
-is no good solution for the problem, but Configure now provides
-appropriate non-largefile ccflags, ldflags, libswanted, and libs
-in the %Config hash (e.g., $Config{ccflags_nolargefiles}) so the
-extensions that are having problems can try configuring themselves
-without the largefileness.  This is admittedly not a clean solution,
-and the solution may not even work at all.  One potential failure is
-whether one can (or, if one can, whether it's a good idea to) link
-together at all binaries with different ideas about file offsets;
-all this is platform-dependent.
+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 Unicode Support on EBCDIC Still Spotty
 
@@ -3391,23 +3674,6 @@ EBCDIC platforms.  One such known spot are the C<\p{}> and C<\P{}>
 regular expression constructs for code points less than 256: the
 C<pP> are testing for Unicode code points, not knowing about EBCDIC.
 
-=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.
-
-=head2 The Long Double Support Is Still Experimental
-
-The ability to configure Perl's numbers to use "long doubles",
-floating point numbers of hopefully better accuracy, is still
-experimental.  The implementations of long doubles are not yet
-widespread and the existing implementations are not quite mature
-or standardised, therefore trying to support them is a rare
-and moving target.  The gain of more precision may also be offset
-by slowdown in computations (more bits to move around, and the
-operations are more likely to be executed by less optimised
-libraries).
-
 =head2 Seen In Perl 5.7 But Gone Now
 
 C<Time::Piece> (previously known as C<Time::Object>) was removed
@@ -3421,6 +3687,18 @@ developers available, we could not get this fixed and tested in time
 for 5.8.0.  Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2
 development release).
 
+The C<PerlIO::Scalar> and C<PerlIO::Via> (capitalised) were renamed as
+C<PerlIO::scalar> and C<PerlIO::via> (all lowercase) just before 5.8.0.
+The main rationale was to have all core PerlIO layers to have all
+lowercase names.  The "plugins" are named as usual, for example
+C<PerlIO::via::QuotedPrint>.
+
+The C<threads::shared::queue> and C<threads::shared::semaphore> were
+renamed as C<Thread::Queue> and C<Thread::Semaphore> just before 5.8.0.
+The main rationale was to have thread modules to obey normal naming,
+C<Thread::> (the C<threads> and C<threads::shared> themselves are
+more pragma-like, they affect compile-time, so they stay lowercase).
+
 =head1 Reporting Bugs
 
 If you find what you think is a bug, you might check the articles