From: Rafael Garcia-Suarez Date: Thu, 25 Sep 2003 19:40:50 +0000 (+0000) Subject: Update the perldelta for 5.9.0. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1ea9f2df412893e68c49dc87fabb12009999e1fc;p=p5sagit%2Fp5-mst-13.2.git Update the perldelta for 5.9.0. p4raw-id: //depot/perl@21382 --- diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 444dcf9..b71457e 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -9,6 +9,109 @@ the 5.9.0 release. =head1 Incompatible Changes +=head2 Hash Randomisation + +Mainly due to security reasons, the "random ordering" of hashes +has been made even more random. Previously while the order of hash +elements from keys(), values(), and each() was essentially random, +it was still repeatable. Now, however, the order varies between +different runs of Perl. + +B, and the +ordering has already changed several times during the lifetime of +Perl 5. Also, the ordering of hash keys has always been, and +continues to be, affected by the insertion order. + +The added randomness may affect applications. + +One possible scenario is when output of an application has included +hash data. For example, if you have used the Data::Dumper module to +dump data into different files, and then compared the files to see +whether the data has changed, now you will have false positives since +the order in which hashes are dumped will vary. In general the cure +is to sort the keys (or the values); in particular for Data::Dumper to +use the C option. If some particular order is really +important, use tied hashes: for example the Tie::IxHash module +which by default preserves the order in which the hash elements +were added. + +More subtle problem is reliance on the order of "global destruction". +That is what happens at the end of execution: Perl destroys all data +structures, including user data. If your destructors (the DESTROY +subroutines) have assumed any particular ordering to the global +destruction, there might be problems ahead. For example, in a +destructor of one object you cannot assume that objects of any other +class are still available, unless you hold a reference to them. +If the environment variable PERL_DESTRUCT_LEVEL is set to a non-zero +value, or if Perl is exiting a spawned thread, it will also destruct +the ordinary references and the symbol tables that are no longer in use. +You can't call a class method or an ordinary function on a class that +has been collected that way. + +The hash randomisation is certain to reveal hidden assumptions about +some particular ordering of hash elements, and outright bugs: it +revealed a few bugs in the Perl core and core modules. + +To disable the hash randomisation in runtime, set the environment +variable PERL_HASH_SEED to 0 (zero) before running Perl (for more +information see L), or to disable the feature +completely in compile time, compile with C<-DNO_HASH_SEED> (see F). + +See L for the original +rationale behind this change. + +=head2 UTF-8 On Filehandles No Longer Activated By Locale + +In Perl 5.8.0 all filehandles, including the standard filehandles, +were implicitly set to be in Unicode UTF-8 if the locale settings +indicated the use of UTF-8. This feature caused too many problems, +so the feature was turned off and redesigned: see L. + +=head2 Single-number v-strings are no longer v-strings before "=>" + +The version strings or v-strings (see L) +feature introduced in Perl 5.6.0 has been a source of some confusion-- +especially when the user did not want to use it, but Perl thought it +knew better. Especially troublesome has been the feature that before +a "=>" a version string (a "v" followed by digits) has been interpreted +as a v-string instead of a string literal. In other words: + + %h = ( v65 => 42 ); + +has meant since Perl 5.6.0 + + %h = ( 'A' => 42 ); + +(at least in platforms of ASCII progeny) Perl 5.8.1 restored the +more natural interpretation + + %h = ( 'v65' => 42 ); + +The multi-number v-strings like v65.66 and 65.66.67 still continue to +be v-strings in Perl 5.8. + +=head2 (Win32) The -C Switch Has Been Repurposed + +The -C switch has changed in an incompatible way. The old semantics +of this switch only made sense in Win32 and only in the "use utf8" +universe in 5.6.x releases, and do not make sense for the Unicode +implementation in 5.8.0. Since this switch could not have been used +by anyone, it has been repurposed. The behavior that this switch +enabled in 5.6.x releases may be supported in a transparent, +data-dependent fashion in a future release. + +For the new life of this switch, see L<"UTF-8 no longer default under +UTF-8 locales">, and L. + +=head2 (Win32) The /d Switch Of cmd.exe + +Since version 5.8.1, perl uses the /d switch when running the cmd.exe shell +internally for system(), backticks, and when opening pipes to external +programs. The extra switch disables the execution of AutoRun commands +from the registry, which is generally considered undesirable when +running external programs. If you wish to retain compatibility with +the older behavior, set PERL5SHELL in your environment to C. + =head2 The C<$*> variable has been removed C<$*>, which was deprecated in favor of the C and C regexp @@ -16,39 +119,877 @@ modifiers, has been removed. =head1 Core Enhancements +=head2 Assertions + +Perl 5.9.0 has experimental support for assertions. Note that hhe user +interface is not fully stabilized yet, and it may change until the 5.10.0 +release. A new command-line switch, B<-A>, is used to activate +assertions, which are declared with the C pragma. See +L. + +=head2 Defined-or operators + +A new operator C (defined-or) has been implemented. +The following statement: + + $a // $b + +is merely equivalent to + + defined $a ? $a : $b + +and + + $c //= $d; + +can be used instead of + + $c = $d unless defined $c; + +This operator has the same precedence and associativity as C<||>. +It has a low-precedence counterpart, C, which has the same precedence +and associativity as C. Special care has been taken to ensure that +those operators Do What You Mean while not breaking old code, but some +edge cases involving the empty regular expression may now parse +differently. See L for details. + +=head2 UTF-8 no longer default under UTF-8 locales + +In Perl 5.8.0 many Unicode features were introduced. One of them +was found to be of more nuisance than benefit: the automagic +(and silent) "UTF-8-ification" of filehandles, including the +standard filehandles, if the user's locale settings indicated +use of UTF-8. + +For example, if you had C as your locale, your STDIN and +STDOUT were automatically "UTF-8", in other words an implicit +binmode(..., ":utf8") was made. This meant that trying to print, say, +chr(0xff), ended up printing the bytes 0xc3 0xbf. Hardly what +you had in mind unless you were aware of this feature of Perl 5.8.0. +The problem is that the vast majority of people weren't: for example +in RedHat releases 8 and 9 the B locale setting is UTF-8, so +all RedHat users got UTF-8 filehandles, whether they wanted it or not. +The pain was intensified by the Unicode implementation of Perl 5.8.0 +(still) having nasty bugs, especially related to the use of s/// and +tr///. (Bugs that have been fixed in 5.8.1) + +Therefore a decision was made to backtrack the feature and change it +from implicit silent default to explicit conscious option. The new +Perl command line option C<-C> and its counterpart environment +variable PERL_UNICODE can now be used to control how Perl and Unicode +interact at interfaces like I/O and for example the command line +arguments. See L and L for more +information. + +=head2 Unsafe signals again available + +In Perl 5.8.0 the so-called "safe signals" were introduced. This +means that Perl no longer handles signals immediately but instead +"between opcodes", when it is safe to do so. The earlier immediate +handling easily could corrupt the internal state of Perl, resulting +in mysterious crashes. + +However, the new safer model has its problems too. Because now an +opcode, a basic unit of Perl execution, is never interrupted but +instead let to run to completion, certain operations that can take a +long time now really do take a long time. For example, certain +network operations have their own blocking and timeout mechanisms, and +being able to interrupt them immediately would be nice. + +Therefore perl 5.8.1 introduced a "backdoor" to restore the pre-5.8.0 +(pre-5.7.3, really) signal behaviour. Just set the environment variable +PERL_SIGNALS to C, and the old immediate (and unsafe) +signal handling behaviour returns. See L +and L. + +In completely unrelated news, you can now use safe signals with +POSIX::SigAction. See L. + =head2 Tied Arrays with Negative Array Indices Formerly, the indices passed to C, C, C, and C methods in tied array class were always non-negative. If the actual argument was negative, Perl would call FETCHSIZE implicitly and add the result to the index before passing the result to the tied -array method. This behavior is now optional. If the tied array class +array method. This behaviour is now optional. If the tied array class contains a package variable named C<$NEGATIVE_INDICES> which is set to a true value, negative values will be passed to C, C, C, and C unchanged. +=head2 local ${$x} + +The syntaxes + + local ${$x} + local @{$x} + local %{$x} + +now do localise variables, given that the $x is a valid variable name. + +=head2 Unicode Character Database 4.0.0 + +The copy of the Unicode Character Database included in Perl 5.8 has +been updated to 4.0.0 from 3.2.0. This means for example that the +Unicode character properties are as in Unicode 4.0.0. + +=head2 Miscellaneous Enhancements + +C now defaults to unpacking the C<$_>. + +C in void context is no longer expensive. C is now context +aware, and will not construct a list if called in void context. + +If a socket gets closed by the server while printing to it, the client +now gets a SIGPIPE. While this new feature was not planned, it fell +naturally out of PerlIO changes, and is to be considered an accidental +feature. + +PerlIO::get_layers(FH) returns the names of the PerlIO layers +active on a filehandle. + +PerlIO::via layers can now have an optional UTF8 method to +indicate whether the layer wants to "auto-:utf8" the stream. + +utf8::is_utf8() has been added as a quick way to test whether +a scalar is encoded internally in UTF-8 (Unicode). + =head1 Modules and Pragmata +=head2 Updated Modules And Pragmata + +The following modules and pragmata have been updated since Perl 5.8.0: + +=over 4 + +=item base + +=item B::Bytecode + +In much better shape than it used to be. Still far from perfect, but +maybe worth a try. + +=item B::Concise + +=item B::Deparse + +=item Benchmark + +An optional feature, C<:hireswallclock>, now allows for high +resolution wall clock times (uses Time::HiRes). + +=item ByteLoader + +See B::Bytecode. + +=item bytes + +Now has bytes::substr. + +=item CGI + +=item charnames + +One can now have custom character name aliases. + +=item CPAN + +There is now a simple command line frontend to the CPAN.pm +module called F. + +=item Data::Dumper + +A new option, Pair, allows choosing the separator between hash keys +and values. + +=item DB_File + +=item Devel::PPPort + +=item Digest::MD5 + +=item Encode + +Significant updates on the encoding pragma functionality +(tr/// and the DATA filehandle, formats). + +If a filehandle has been marked as to have an encoding, unmappable +characters are detected already during input, not later (when the +corrupted data is being used). + +The ISO 8859-6 conversion table has been corrected (the 0x30..0x39 +erroneously mapped to U+0660..U+0669, instead of U+0030..U+0039). The +GSM 03.38 conversion did not handle escape sequences correctly. The +UTF-7 encoding has been added (making Encode feature-complete with +Unicode::String). + +=item fields + +=item libnet + +=item Math::BigInt + +A lot of bugs have been fixed since v1.60, the version included in Perl +v5.8.0. Especially noteworthy are the bug in Calc that caused div and mod to +fail for some large values, and the fixes to the handling of bad inputs. + +Some new features were added, e.g. the broot() method, you can now pass +parameters to config() to change some settings at runtime, and it is now +possible to trap the creation of NaN and infinity. + +As usual, some optimizations took place and made the math overall a tad +faster. In some cases, quite a lot faster, actually. Especially alternative +libraries like Math::BigInt::GMP benefit from this. In addition, a lot of the +quite clunky routines like fsqrt() and flog() are now much much faster. + +=item MIME::Base64 + +=item NEXT + +Diamond inheritance now works. + +=item Net::Ping + +=item PerlIO::scalar + +Reading from non-string scalars (like the special variables, see +L) now works. + +=item podlators + +=item Pod::LaTeX + +=item PodParsers + +=item Pod::Perldoc + +Complete rewrite. As a side-effect, no longer refuses to startup when +run by root. + +=item Scalar::Util + +New utilities: refaddr, isvstring, looks_like_number, set_prototype. + +=item Storable + +Can now store code references (via B::Deparse, so not foolproof). + +=item strict + +Earlier versions of the strict pragma did not check the parameters +implicitly passed to its "import" (use) and "unimport" (no) routine. +This caused the false idiom such as: + + use strict qw(@ISA); + @ISA = qw(Foo); + +This however (probably) raised the false expectation that the strict +refs, vars and subs were being enforced (and that @ISA was somehow +"declared"). But the strict refs, vars, and subs are B enforced +when using this false idiom. + +Starting from Perl 5.8.1, the above B cause an error to be +raised. This may cause programs which used to execute seemingly +correctly without warnings and errors to fail when run under 5.8.1. +This happens because + + use strict qw(@ISA); + +will now fail with the error: + + Unknown 'strict' tag(s) '@ISA' + +The remedy to this problem is to replace this code with the correct idiom: + + use strict; + use vars qw(@ISA); + @ISA = qw(Foo); + +=item Term::ANSIcolor + +=item Test::Harness + +Now much more picky about extra or missing output from test scripts. + +=item Test::More + +=item Test::Simple + +=item Text::Balanced + +=item Time::HiRes + +Use of nanosleep(), if available, allows mixing subsecond sleeps with +alarms. + +=item threads + +Several fixes, for example for join() problems and memory +leaks. In some platforms (like Linux) that use glibc the minimum memory +footprint of one ithread has been reduced by several hundred kilobytes. + +=item threads::shared + +Many memory leaks have been fixed. + +=item Unicode::Collate + +=item Unicode::Normalize + +=item Win32::GetFolderPath + +=item Win32::GetOSVersion + +Now returns extra information. + +=back + =head1 Utility Changes +The C utility now produces a more modern layout: +F instead of F. +Also, the boilerplate test is now called F +instead of F. + +The Perl debugger (F) has now been extensively +documented and bugs found while documenting have been fixed. + +C has been rewritten from scratch to be more robust and +featureful. + +C works now at least somewhat better, while C +is rather more broken. (The Perl compiler suite as a whole continues +to be experimental.) + =head1 New Documentation +perl573delta has been added to list the differences between the +(now quite obsolete) development releases 5.7.2 and 5.7.3. + +perl58delta and perl581delta have been added: these are the perldeltas +of 5.8.0 and 5.8.1, detailing the differences respectively between +5.6.0 and 5.8.0, and between 5.8.0 and 5.8.1. + +perlartistic has been added: it is the Artistic License in pod format, +making it easier for modules to refer to it. + +perlcheat has been added: it is a Perl cheat sheet. + +perlgpl has been added: it is the GNU General Public License in pod +format, making it easier for modules to refer to it. + +perlmacosx has been added to tell about the installation and use +of Perl in Mac OS X. + +perlos400 has been added to tell about the installation and use +of Perl in OS/400 PASE. + +perlreref has been added: it is a regular expressions quick reference. + =head1 Performance Enhancements =head1 Installation and Configuration Improvements +The UNIX standard Perl location, F, is no longer +overwritten by default if it exists. This change was very prudent +because so many UNIX vendors already provide a F, +but simultaneously many system utilities may depend on that +exact version of Perl, so better not to overwrite it. + +One can now specify installation directories for site and vendor man +and HTML pages, and site and vendor scripts. See F. + +One can now specify a destination directory for Perl installation +by specifying the DESTDIR variable for C. (This feature +is slightly different from the previous C.) +See F. + +gcc versions 3.x introduced a new warning that caused a lot of noise +during Perl compilation: C. This warning has now been avoided by +Configure weeding out such directories before the compilation. + +One can now build subsets of Perl core modules by using the +Configure flags C<-Dnoextensions=...> and C<-Donlyextensions=...>, +see F. + +=head2 Platform-specific enhancements + +In Cygwin Perl can now be built with threads (C). +This works with both Cygwin 1.3.22 and Cygwin 1.5.3. + +In newer FreeBSD releases Perl 5.8.0 compilation failed because of +trying to use F, which in FreeBSD is just a dummy file, and +a fatal error to even try to use. Now F is not used. + +Perl is now known to build also in Hitachi HI-UXMPP. + +Perl is now known to build again in LynxOS. + +Mac OS X now installs with Perl version number embedded in +installation directory names for easier upgrading of user-compiled +Perl, and the installation directories in general are more standard. +In other words, the default installation no longer breaks the +Apple-provided Perl. On the other hand, with C +you can now really replace the Apple-supplied Perl (B). + +Mac OS X now builds Perl statically by default. This change was done +mainly for faster startup times. The Apple-provided Perl is still +dynamically linked and shared, and you can enable the sharedness for +your own Perl builds by C. + +Perl has been ported to IBM's OS/400 PASE environment. The best way +to build a Perl for PASE is to use an AIX host as a cross-compilation +environment. See README.os400. + +Yet another cross-compilation option has been added: now Perl builds +on OpenZaurus, an Linux distribution based on Mandrake + Embedix for +the Sharp Zaurus PDA. See the Cross/README file. + +Tru64 when using gcc 3 drops the optimisation for F to C<-O2> +because of gigantic memory use with the default C<-O3>. + +Tru64 can now build Perl with the newer Berkeley DBs. + +Building Perl on WinCE has been much enhanced, see F +and F. + =head1 Selected Bug Fixes +=head2 Closures, eval and lexicals + +There have been many fixes in the area of anonymous subs, lexicals and +closures. Although this means that Perl is now more "correct", it is +possible that some existing code will break that happens to rely on +the faulty behaviour. In practice this is unlikely unless your code +contains a very complex nesting of anonymous subs, evals and lexicals. + +=head2 Generic fixes + +If an input filehandle is marked C<:utf8> and Perl sees illegal UTF-8 +coming in when doing C<< >>, if warnings are enabled a warning is +immediately given - instead of being silent about it and Perl being +unhappy about the broken data later. (The C<:encoding(utf8)> layer +also works the same way.) + +binmode(SOCKET, ":utf8") only worked on the input side, not on the +output side of the socket. Now it works both ways. + +For threaded Perls certain system database functions like getpwent() +and getgrent() now grow their result buffer dynamically, instead of +failing. This means that at sites with lots of users and groups the +functions no longer fail by returning only partial results. + +Perl 5.8.0 had accidentally broken the capability for users +to define their own uppercase<->lowercase Unicode mappings +(as advertised by the Camel). This feature has been fixed and +is also documented better. + +In 5.8.0 this + + $some_unicode .= ; + +didn't work correctly but instead corrupted the data. This has now +been fixed. + +Tied methods like FETCH etc. may now safely access tied values, i.e. +resulting in a recursive call to FETCH etc. Remember to break the +recursion, though. + +At startup Perl blocks the SIGFPE signal away since there isn't much +Perl can do about it. Previously this blocking was in effect also for +programs executed from within Perl. Now Perl restores the original +SIGFPE handling routine, whatever it was, before running external +programs. + +Linenumbers in Perl scripts may now be greater than 65536, or 2**16. +(Perl scripts have always been able to be larger than that, it's just +that the linenumber for reported errors and warnings have "wrapped +around".) While scripts that large usually indicate a need to rethink +your code a bit, such Perl scripts do exist, for example as results +from generated code. Now linenumbers can go all the way to +4294967296, or 2**32. + +=head2 Platform-specific fixes + +Linux + +=over 4 + +=item * + +Setting $0 works again (with certain limitations that +Perl cannot do much about: see L) + +=back + +HP-UX + +=over 4 + +=item * + +Setting $0 now works. + +=back + +VMS + +=over 4 + +=item * + +Configuration now tests for the presence of C, and IO::Poll +now uses the vendor-supplied function if detected. + +=item * + +A rare access violation at Perl start-up could occur if the Perl image was +installed with privileges or if there was an identifier with the +subsystem attribute set in the process's rightslist. Either of these +circumstances triggered tainting code that contained a pointer bug. +The faulty pointer arithmetic has been fixed. + +=item * + +The length limit on values (not keys) in the %ENV hash has been raised +from 255 bytes to 32640 bytes (except when the PERL_ENV_TABLES setting +overrides the default use of logical names for %ENV). If it is +necessary to access these long values from outside Perl, be aware that +they are implemented using search list logical names that store the +value in pieces, each 255-byte piece (up to 128 of them) being an +element in the search list. When doing a lookup in %ENV from within +Perl, the elements are combined into a single value. The existing +VMS-specific ability to access individual elements of a search list +logical name via the $ENV{'foo;N'} syntax (where N is the search list +index) is unimpaired. + +=item * + +The piping implementation now uses local rather than global DCL +symbols for inter-process communication. + +=item * + +File::Find could become confused when navigating to a relative +directory whose name collided with a logical name. This problem has +been corrected by adding directory syntax to relative path names, thus +preventing logical name translation. + +=back + +Win32 + +=over 4 + +=item * + +A memory leak in the fork() emulation has been fixed. + +=item * + +The return value of the ioctl() built-in function was accidentally +broken in 5.8.0. This has been corrected. + +=item * + +The internal message loop executed by perl during blocking operations +sometimes interfered with messages that were external to Perl. +This often resulted in blocking operations terminating prematurely or +returning incorrect results, when Perl was executing under environments +that could generate Windows messages. This has been corrected. + +=item * + +Pipes and sockets are now automatically in binary mode. + +=item * + +The four-argument form of select() did not preserve $! (errno) properly +when there were errors in the underlying call. This is now fixed. + +=item * + +The "CR CR LF" problem of has been fixed, binmode(FH, ":crlf") +is now effectively a no-op. + +=back + =head1 New or Changed Diagnostics +All the warnings related to pack() and unpack() were made more +informative and consistent. + +=head2 Changed "A thread exited while %d threads were running" + +The old version + + A thread exited while %d other threads were still running + +was misleading because the "other" included also the thread giving +the warning. + +=head2 Removed "Attempt to clear a restricted hash" + +It is not illegal to clear a restricted hash, so the warning +was removed. + +=head2 New "Illegal declaration of anonymous subroutine" + +You must specify the block of code for C. + +=head2 Changed "Invalid range "%s" in transliteration operator" + +The old version + + Invalid [] range "%s" in transliteration operator + +was simply wrong because there are no "[] ranges" in tr///. + +=head2 New "Missing control char name in \c" + +Self-explanatory. + +=head2 New "Newline in left-justified string for %s" + +The padding spaces would appear after the newline, which is +probably not what you had in mind. + +=head2 New "Possible precedence problem on bitwise %c operator" + +If you think this + + $x & $y == 0 + +tests whether the bitwise AND of $x and $y is zero, +you will like this warning. + +=head2 New "read() on %s filehandle %s" + +You cannot read() (or sysread()) from a closed or unopened filehandle. + +=head2 New "Tied variable freed while still in use" + +Something pulled the plug on a live tied variable, Perl plays +safe by bailing out. + +=head2 New "To%s: illegal mapping '%s'" + +An illegal user-defined Unicode casemapping was specified. + +=head2 New "Use of freed value in iteration" + +Something modified the values being iterated over. This is not good. + =head1 Changed Internals +These news matter to you only if you either write XS code or like to +know about or hack Perl internals (using Devel::Peek or any of the +C modules counts), or like to run Perl with the C<-D> option. + +The embedding examples of L have been reviewed to be +uptodate and consistent: for example, the correct use of +PERL_SYS_INIT3() and PERL_SYS_TERM(). + +Extensive reworking of the pad code (the code responsible +for lexical variables) has been conducted by Dave Mitchell. + +Extensive work on the v-strings by John Peacock. + +UTF-8 length and position cache: to speed up the handling of Unicode +(UTF-8) scalars, a cache was introduced. Potential problems exist if +an extension bypasses the official APIs and directly modifies the PV +of an SV: the UTF-8 cache does not get cleared as it should. + +APIs obsoleted in Perl 5.8.0, like sv_2pv, sv_catpvn, sv_catsv, +sv_setsv, are again available. + +Certain Perl core C APIs like cxinc and regatom are no longer +available at all to code outside the Perl core of the Perl core +extensions. This is intentional. They never should have been +available with the shorter names, and if you application depends on +them, you should (be ashamed and) contact perl5-porters to discuss +what are the proper APIs. + +Certain Perl core C APIs like C are no longer available +without their C prefix. If your XS module stops working +because some functions cannot be found, in many cases a simple fix is +to add the C prefix to the function and the thread context +C as the first argument of the function call. This is also how +it should always have been done: letting the Perl_-less forms to leak +from the core was an accident. For cleaner embedding you can also +force this for all APIs by defining at compile time the cpp define +PERL_NO_SHORT_NAMES. + +Perl_save_bool() has been added. + +Regexp objects (those created with C) now have S-magic rather than +R-magic. This fixed regexps of the form /...(??{...;$x})/ to no +longer ignore changes made to $x. The S-magic avoids dropping +the caching optimization and making (??{...}) constructs obscenely +slow (and consequently useless). See also L. +Regexp::Copy was affected by this change. + +The Perl internal debugging macros DEBUG() and DEB() have been renamed +to PERL_DEBUG() and PERL_DEB() to avoid namespace conflicts. + +C<-DL> removed (the leaktest had been broken and unsupported for years, +use alternative debugging mallocs or tools like valgrind and Purify). + +Verbose modifier C added for C<-DXv> and C<-Dsv>, see L. + =head1 New Tests +In Perl 5.8.0 there were about 69000 separate tests in about 700 test files, +in Perl 5.9.0 there are about 77000 separate tests in about 780 test files. +The exact numbers depend on the Perl configuration and on the operating +system platform. + =head1 Known Problems +The hash randomisation mentioned in L is definitely +problematic: it will wake dormant bugs and shake out bad assumptions. + +Many of the rarer platforms that worked 100% or pretty close to it +with perl 5.8.0 have been left a little bit untended since their +maintainers have been otherwise busy lately, and therefore there will +be more failures on those platforms. Such platforms include Mac OS +Classic, IBM z/OS (and other EBCDIC platforms), and NetWare. The most +common Perl platforms (Unix and Unix-like, Microsoft platforms, and +VMS) have large enough testing and expert population that they are +doing well. + +=head2 Tied hashes in scalar context + +Tied hashes do not currently return anything useful in scalar context, +for example when used as boolean tests: + + if (%tied_hash) { ... } + +The current nonsensical behaviour is always to return false, +regardless of whether the hash is empty or has elements. + +The root cause is that there is no interface for the implementors of +tied hashes to implement the behaviour of a hash in scalar context. + +=head2 Net::Ping 450_service and 510_ping_udp failures + +The subtests 9 and 18 of lib/Net/Ping/t/450_service.t, and the +subtest 2 of lib/Net/Ping/t/510_ping_udp.t might fail if you have +an unusual networking setup. For example in the latter case the +test is trying to send a UDP ping to the IP address 127.0.0.1. + +=head2 B::C + +The C-generating compiler backend B::C (the frontend being +C) is even more broken than it used to be because of +the extensive lexical variable changes. (The good news is that +B::Bytecode and ByteLoader are better than they used to be.) + =head1 Platform Specific Problems +=head2 EBCDIC Platforms + +IBM z/OS and other EBCDIC platforms continue to be problematic +regarding Unicode support. Many Unicode tests are skipped when +they really should be fixed. + +=head2 Cygwin 1.5 problems + +In Cygwin 1.5 the F and F tests have failures for +some yet unknown reason. In 1.5.5 the threads tests stress_cv, +stress_re, and stress_string are failing unless the environment +variable PERLIO is set to "perlio" (which makes also the io/tell +failure go away). + +Perl 5.8.1 does build and work well with Cygwin 1.3: with (uname -a) +C +a 100% "make test" was achieved with C. + +=head2 HP-UX: HP cc warnings about sendfile and sendpath + +With certain HP C compiler releases (e.g. B.11.11.02) you will +get many warnings like this (lines wrapped for easier reading): + + cc: "/usr/include/sys/socket.h", line 504: warning 562: + Redeclaration of "sendfile" with a different storage class specifier: + "sendfile" will have internal linkage. + cc: "/usr/include/sys/socket.h", line 505: warning 562: + Redeclaration of "sendpath" with a different storage class specifier: + "sendpath" will have internal linkage. + +The warnings show up both during the build of Perl and during certain +lib/ExtUtils tests that invoke the C compiler. The warning, however, +is not serious and can be ignored. + +=head2 IRIX: t/uni/tr_7jis.t falsely failing + +The test t/uni/tr_7jis.t is known to report failure under 'make test' +or the test harness with certain releases of IRIX (at least IRIX 6.5 +and MIPSpro Compilers Version 7.3.1.1m), but if run manually the test +fully passes. + +=head2 Mac OS X: no usemymalloc + +The Perl malloc (C<-Dusemymalloc>) does not work at all in Mac OS X. +This is not that serious, though, since the native malloc works just +fine. + +=head2 Tru64: No threaded builds with GNU cc (gcc) + +In the latest Tru64 releases (e.g. v5.1B or later) gcc cannot be used +to compile a threaded Perl (-Duseithreads) because the system +C<< >> file doesn't know about gcc. + +=head2 Win32: sysopen, sysread, syswrite + +As of the 5.8.0 release, sysopen()/sysread()/syswrite() do not behave +like they used to in 5.6.1 and earlier with respect to "text" mode. +These built-ins now always operate in "binary" mode (even if sysopen() +was passed the O_TEXT flag, or if binmode() was used on the file +handle). Note that this issue should only make a difference for disk +files, as sockets and pipes have always been in "binary" mode in the +Windows port. As this behavior is currently considered a bug, +compatible behavior may be re-introduced in a future release. Until +then, the use of sysopen(), sysread() and syswrite() is not supported +for "text" mode operations. + +=head1 TODO + +Here are some things that are planned for perl 5.10.0 : + +=over 4 + +=item * + +Various Copy-On-Write techniques will be investigated in hopes +of speeding up Perl. + +=item * + +CPANPLUS, Inline, and Module::Build will become core modules. + +=item * + +The ability to write true lexically scoped pragmas will be introduced, +perhaps via a C pragma. + +=item * + +Work will continue on the bytecompiler and byteloader. + +=item * + +v-strings as they currently exist are scheduled to be deprecated. The +v-less form (1.2.3) will become a "version object" when used with C, +C, and C<$VERSION>. $^V will also be a "version object" so the +printf("%vd",...) construct will no longer be needed. The v-ful version +(v1.2.3) will become obsolete. The equivalence of strings and v-strings (e.g. +that currently 5.8.0 is equal to "\5\8\0") will go away. B, though: it is quite hard to detect when +v-strings are being used safely, and when they are not. + +=back + =head1 Reporting Bugs If you find what you think is a bug, you might check the articles @@ -60,7 +1001,8 @@ If you believe you have an unreported bug, please run the B program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of C, will be sent off to perlbug@perl.org to be -analysed by the Perl porting team. +analysed by the Perl porting team. You can browse and search +the Perl 5 bugs at F. =head1 SEE ALSO