X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/61154ac0d41ba2a544591a0c8597e503d31abca8..7b8e5ef0662e52d98602ab69b7b9af6778e78e42:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 9820c0a..a9ae7ee 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,24 +1,20 @@ =encoding utf8 -=for comment -This has been completed up to 84c2f6fdcb. - - =head1 NAME [ this is a template for a new perldelta file. Any text flagged as XXX needs to be processed before release. ] -perldelta - what is new for perl v5.15.3 +perldelta - what is new for perl v5.15.4 =head1 DESCRIPTION -This document describes differences between the 5.15.2 release and -the 5.15.3 release. +This document describes differences between the 5.15.3 release and +the 5.15.4 release. -If you are upgrading from an earlier release such as 5.15.1, first read -L, which describes differences between 5.15.1 and -5.15.2. +If you are upgrading from an earlier release such as 5.15.3, first read +L, which describes differences between 5.15.3 and +5.15.4. =head1 Notice @@ -26,26 +22,15 @@ XXX Any important notices here =head1 Core Enhancements -XXX New core language features go here. Summarise user-visible core language -enhancements. Particularly prominent performance optimisations could go -here, but most should go in the L section. - -[ List each enhancement as a =head2 entry ] - -=head2 More CORE subs are callable through references +=head2 $^X converted to an absolute path on FreeBSD, OS X and Solaris -Perl 5.15.2 introduced subroutines in the CORE namespace. Most of them -could only be called as barewords; i.e., they could be aliased at compile -time and then inlined under new names. +C<$^X> is now converted to an absolute path on OS X, FreeBSD (without +needing F mounted) and Solaris 10 and 11. This augments the +previous approach of using F on Linux, FreeBSD and NetBSD +(in all cases, where mounted). -Almost all of these functions can now be called through references and via -C<&foo()> syntax, bypassing the prototype. See L for a list of the -exceptions. - -=head2 New debugger commands - -The debugger now has C and C commands for disabling -existing breakpoints and reënabling them. See L. +This makes relocatable perl installations more useful on these platforms. +(See "Relocatable @INC" in F) =head1 Security @@ -55,55 +40,14 @@ L section. [ List each security issue as a =head2 entry ] -=head2 C memory error with GLOB_ALTDIRFUNC (CVE-2011-2728). - -Calling C with the unsupported flag GLOB_ALTDIRFUNC would -cause an access violation / segfault. A Perl program that accepts a flags value from -an external source could expose itself to denial of service or arbitrary code -execution attacks. There are no known exploits in the wild. The problem has been -corrected by explicitly disabling all unsupported flags and setting unused function -pointers to null. Bug reported by Clément Lecigne. - =head1 Incompatible Changes -=head2 $[ has been removed +XXX For a release on a stable branch, this section aspires to be: -The array/string index offsetting mechanism, controlled by the C<$[> magic -variable, has been removed. C<$[> now always reads as zero. Writing a -zero to it is still permitted, but writing a non-zero value causes an -exception. Those hopelessly addicted to FORTRAN-style 1-based indexing -may wish to use the module L, which provides an independent -implementation of the index offsetting concept, or L, -which allows L to be controlled through assignment to C<$[>. + There are no changes intentionally incompatible with 5.XXX.XXX + If any exist, they are bugs and reports are welcome. -=head2 User-defined case changing operations. - -This feature was deprecated in Perl 5.14, and has now been removed. -The CPAN module L provides better functionality without -the drawbacks that this feature had, as are detailed in the 5.14 -documentation: -L - -=head2 XSUBs are now 'static' - -XSUB C functions are now 'static', that is, they are not visible from -outside the compilation unit. Users can use the new C -and C macros to pick the desired linking behaviour. -The ordinary C declaration for XSUBs will continue to declare -non-'static' XSUBs for compatibility, but the XS compiler, -C (C) will emit 'static' XSUBs by default. -C's behaviour can be reconfigured from XS using the -C keyword, see L for details. - -=head2 Borland compiler - -All support for the Borland compiler has been dropped. The code had not -worked for a long time anyway. - -=head2 Weakening read-only references - -Weakening read-only references is no longer permitted. It should never -hove worked anyway, and in some cases could result in crashes. +[ List each incompatible change as a =head2 entry ] =head1 Deprecations @@ -156,225 +100,11 @@ XXX =item * -L has been upgraded from version 1.00 to version 1.01. - -This is only a minor documentation update. - -=item * - -L has been upgraded from version 0.52 to version 0.56. - -Resolved an issue where C executable was present in C on MSWin32 - -=item * - -L has been upgraded from version 1.76 to version 1.78. - -=item * - -L has been upgraded from version 1.07 to 1.08. - -It now correctly deparses C<$#{/}> and C. - -=item * - -L has been upgraded from version 2.112150 to version 2.112580. - -=item * - -L has been upgraded from version 0.003 to version 0.004. - -=item * - -L has been upgraded from version 0.9109 to version 0.9111. - -=item * - -L has been upgraded from version 0.56 to version 0.58. - -=item * - -L has been upgraded from version 3.19 to version 3.20. - -=item * - -L has been upgraded from version 1.24 to version 1.25. - -It now strips out C<...>> formatting codes before displaying -descriptions [perl #94488]. - -=item * - -L has been upgraded from version 2.133 to version 2.134. - -The XS code for sorting hash keys has been simplified slightly. - -=item * - -L has been upgraded from version 5.64_03 to version 5.65. - -=item * - -L has been upgraded from version 3.03_01 to version 3.04_04. - -The handling of C in the generated XS code has been simplified. - -The previously broken "INCLUDE: ... |" functionality has been repaired -(CPAN RT #70213). - -A compatibility-workaround for modules that cannot -live with the new XSUB staticness (see I above) -has been implemented with the C and -C preprocessor defines. - -The compiler warnings when -except option is used with F -have been fixed. - -The XSUB.h changes to make C use C -by default (which were in the 5.15.2 dev release of perl) -have been reverted since too many CPAN modules expect to -be able to refer to XSUBs declared with C. -Instead, C will define a copy of the -C/C macros as necessary going back to -perl 5.10.0. By default, ExtUtils::ParseXS will use -C instead of C. - -Fixed regression for input-typemap override in XS argument -list (CPAN RT #70448). - -C now properly strips trailing semicolons -from inputmaps. These could previously trigger warnings (errors -in strict C89 compilers) due to additional semicolons being -interpreted as empty statements. - -Now detects and throws a warning if there is a C section using -C, but no C section (CPAN RT #69536). - -=item * - -L has been upgraded from version 3.17 to version 3.18. - -The CIA world added non-standard values, so this is no longer used as a source -of data. - -=item * - -L has been upgraded from version 1.12 to version 1.13. - -On Windows, tilde (~) expansion now checks the C environment -variable, after checking C. - -See also L. - -=item * - -L has been upgrade from version 0.87 to 0.88. - -It is now better at detecting the end of a pod section. It always checks -for =cut, instead of checking for =end (if the pod begins with =begin) or -the end of the paragraph (if the pod begins with =for) [perl #92436]. - -It is also better at detecting variables. A method call on a variable is -no longer considered part of the variable name, so strings passed to a -method are now hidden from filters that do not want to deal with strings -[perl #92436]. - -=item * - -L has been upgraded from version 1.25_05 to 1.25_06, and L -from version 1.32 to 1.33. - -Together, these upgrades fix a problem with IO::Handle's C and -C methods. When these methods are called on the special ARGV -handle, the next file is automatically opened, as happens with the built-in -C<< <> >> and C functions. But, unlike the built-ins, these -methods were not respecting the caller's use of the L pragma and -applying the approprate I/O layers to the newly-opened file -[rt.cpan.org #66474]. - -=item * - -L has been upgraded from version 0.2602 to version 0.2603. - -C on a Math::BigRat object containing -1/2 now creates a -Math::BigInt containing 0, rather than -0. L does not even -support negative zero, so the resulting object was actually malformed -[perl #95530]. - -=item * - -L has been upgraded from version 2.55 to 2.56. - -It was missing a few entries: L in 5.8.2, L in 5.6.0 and -5.6.1, and L in 5.12.3. - -=item * - -L has been upgraded from version 1.000005_01 to version 1.000007. - -=item * - -L has been upgraded from version 0.44 to version 0.46. - -=item * - -L has been upgraded from version 1.11 to version 1.12. - -This is only a minor refactoring of the XS code to bring it closer to the -other C modules. - -=item * - -L has been upgraded from version 1.08 to 1.09. - -It no longer turns of layers on standard handles when invoked without the -":std" directive. Similarly, when invoked I the ":std" directive, it -now clears layers on STDERR before applying the new ones, and not just on -STDIN and STDOUT [perl #92728]. - -=item * - -L has been upgraded from version 5.01500302 to version 5.0150034. - -=item * - -L has been upgraded from version 3.18 to version 3.19. - -=item * - -L has been upgraded from version 1.24 to version 1.25. - -L no longer uses L. Any code which was relying on this -implementation detail was buggy, and may fail as a result of this change. -The module's Perl code has been considerably simplified, roughly halving -the number of lines, with no change in functionality. The XS code has -been refactored to reduce the size of the shared object by about 12%, -with no change in functionality. More POSIX functions now have tests. - -C now defaults the third argument to C, -instead of 0. On most platforms C is defined as 0, but on some -0 is not a valid parameter, which caused a call with defaults to fail. - -=item * - -L has been upgraded from version 2.31 to version 2.32. - -XS code which duplicates functionality of F has been removed. -Tests should now pass on older versions of L. Storable now -builds and passes tests back to perl 5.004. - -=item * - -L has been upgraded from version 1.38 to 1.40. - -Destructors on shared objects used to be ignored sometimes if the objects -were referenced only by shared data structures. This has been mostly -fixed, but destructors may still be ignored if the objects still exist at -global destruction time [perl #98204]. +L has been upgraded from version 5.0150034 to version 5.0150035. =item * -L has been upgraded from version 0.15 to version 0.16. +L has been upgraded from version 6.59 to version 6.61_01. =back @@ -395,47 +125,28 @@ file and be sure to link to the appropriate page, e.g. L. =head2 New Documentation -=head3 L - -This a new OO tutorial. It focuses on basic OO concepts, and then recommends -that readers choose an OO framework from CPAN. - -=head2 Changes to Existing Documentation - -=head3 L +XXX Changes which create B files in F go here. -=over 4 +=head3 L -=item * +XXX Description of the purpose of the new file here -This document has been rewritten from scratch, and its coverage of various OO -concepts has been expanded. +=head2 Changes to Existing Documentation -=back +XXX Changes which significantly change existing files in F go here. +However, any changes to F should go in the L +section. -=head3 L +=head3 L =over 4 =item * -There is now a standard convention for naming keys in the C<%^H>, -documented under L. +XXX Description of the change here =back -=head2 Removed Documentation - -=head3 Old OO Documentation - -All the old OO tutorials, perltoot, perltooc, and perlboot, have been -removed. The perlbot (bag of object tricks) document has been removed as well. - -=head3 Development Deltas - -The old perldelta files for development cycles prior to 5.15 have been -removed. - =head1 Diagnostics The following additions or changes have been made to diagnostic output, @@ -498,21 +209,13 @@ here. Most of these are built within the directories F and F. entries for each change Use L with program names to get proper documentation linking. ] -=head3 L +=head3 L =over 4 =item * -L used to generate code of the form - - unless(defined(&FOO)) { - sub FOO () {42;} - } - -But the subroutine is a compile-time declaration, and is hence unaffected -by the condition. It has now been corrected to emit a string C -around the subroutine [perl #99368]. +XXX =back @@ -529,15 +232,7 @@ L section, instead. =item * -The file F is no longer needed, and has been removed. It -contained a list of all exported functions, one of the files generated by -F from data in F and F. The code -has been refactored so that the only user of F, F, -now reads F and F directly, removing the need to -store the list of exported functions in an intermediate file. - -As F was never installed, this change will not be visible -outside the build process. +XXX =back @@ -555,14 +250,9 @@ that they represent may be covered elsewhere. =item * -F has been added, to run a sanity check on F. -F is not needed on most *nix platforms, but is for Win32, hence -previously was it was possible to inadvertently commit changes that worked -perfectly locally, but broke the build on Win32. - -=item * - -F has been added to test the C function. +F now tests that all config.sh-style files are +complete. These are used by the various non-*nix to generate their +F, and an incomplete input file will generate invalid output. =back @@ -627,23 +317,7 @@ be noted as well. =item * -The C function has been eliminated and merged with -C. It used to be called to determine whether a GV -should be autovivified in rvalue context. Now it has been replaced with a -new C flag (not part of the API). - -=item * - -Padlists are now marked C; i.e., reference-counted. They have -always been reference-counted, but were not marked real, because F -did its own clean-up, instead of using the usual clean-up code in F. -That caused problems in thread cloning, so now the C flag is on, -but is turned off in F right before the padlist is freed (after -F has done its custom freeing of the pads). - -=item * - -All the C files that make up the Perl core have been converted to UTF-8. +XXX =back @@ -659,207 +333,7 @@ L. =item * -In Perl 5.15.0 C stopped returning true if the C<$$> -variable had not been used yet. This has been fixed. - -=item * - -C, C, etc., used to -return true for most, but not all built-in variables, if -they had not been used yet. Many times that new built-in -variables were added in past versions, this construct was -not taken into account, so this affected C<${^GLOBAL_PHASE}> and -C<${^UTF8CACHE}>, among others. It also used to return false if the -package name was given as well (C<${"::!"}>) and for subroutines in the -CORE package [perl #97978] [perl #97492] [perl #97484]. - -=item * - -Perl 5.10.0 introduced a similar bug: C where "foo" -represents the name of a built-in global variable used to return false if -the variable had never been used before, but only on the I call. -This, too, has been fixed. - -=item * - -Various functions that take a filehandle argument in rvalue context -(C, C, etc.) used to call C multiple times, if it -was a tied variable, and warn twice, if it was C [perl #97482]. - -=item * - -C and similar filehandle functions, when called on built-in global -variables (like C<$+>), used to die if the variable happened to hold the -undefined value, instead of producing the usual "Use of uninitialized -value" warning. - -=item * - -When autovivified file handles were introduced in Perl 5.6.0, C -was inadvertently made to autovivify when called as C (but -not as C<< <$foo> >>). It has now been fixed never to autovivify. - -=item * - -C used to call C multiple times, but -now calls it just once. - -=item * - -Some cases of dereferencing a complex expression, such as -C<${ (), $tied } = 1>, used to call C multiple times, but now call -it once. - -=item * - -For a tied variable returning a package name, C<< $tied->method >> used to -call C multiple times (even up to six!), and sometimes would -fail to call the method, due to memory corruption. - -=item * - -Calling an undefined anonymous subroutine (e.g., what $x holds after -C) used to cause a "Not a CODE reference" error, which -has been corrected to "Undefined subroutine called" [perl #71154]. - -=item * - -Causing C<@DB::args> to be freed between uses of C no longer -results in a crash [perl #93320]. - -=item * - -Since 5.6.0, C<*{ ... }> has been inconsistent in how it treats undefined -values. It would die in strict mode or lvalue context for most undefined -values, but would be treated as the empty string (with a warning) for the -specific scalar return by C (C<&PL_sv_undef> internally). This -has been corrected. C is now treated like other undefined -scalars, as in Perl 5.005. - -=item * - -It used to be possible to free the typeglob of a localised array or hash -(e.g., C), resulting in a crash on scope exit. - -=item * - -C used to be equivalent to C<($foo, setpgrp)>, because -C was ignoring its argument if there was just one. Now it is -equivalent to C. - -=item * - -Assignments like C<*$tied = \&{"..."}> and C<*glob = $tied> now call FETCH -only once. - -=item * - -C, C, C, C, C, C, C and the filetest ops (C<-r>, C<-x>, etc.) -now always call FETCH if passed a tied -variable as the last argument. They used to ignore tiedness if the last -thing return from or assigned to the variable was a typeglob or reference -to a typeglob. - -=item * - -Perl 5.15.1 inadvertently stopped C<*foo =~ s/\*//r> from working, as it -would try to force the *foo glob into a string. This has been fixed -[perl #97954]. - -=item * - -If things were arranged in memory the right way, it was possible for -thread joining to emit "Attempt to free unreferenced scalar" warnings if -C had been used from the C package prior to thread creation, -due to the way pads were reference-counted and cloned [perl #98092]. - -=item * - -CORE:: subs were introduced in the previous development release, but -C did not return true. That has been rectified -[perl #97484]. - -=item * - -Lvalue subroutines were made to autovivify in 5.15.0, but it did not work -in some cases involving an intervening list operator between the -dereference operator and the subroutine call (C<${(), lvsub()}>) -[perl #98184]. - -=item * - -A bug has been fixed that occurs when a tied variable is used as a -subroutine reference: if the last thing assigned to or returned from the -variable was a reference or typeglob, the C<\&$tied> could either crash or -return the wrong subroutine. The reference case is a regression introduced -in Perl 5.10.0. For typeglobs, it has probably never worked till now. - -=item * - -C was not scoping its implicit $_ properly, resulting in memory -leaks or "Variable is not available" warnings [perl #94682]. - -=item * - -C<-l> followed by a bareword no longer "eats" the previous argument to -the list operator in whose argument list it resides. In less convoluted -English: C now actually prints "bar", because C<-l> -on longer eats it. - -=item * - -In 5.14.0, filetest ops (C<-r>, C<-x>, etc.) started calling FETCH on a -tied argument belonging to the previous argument to a list operator, if -called with a bareword argument or no argument at all. This has been -fixed, so C no longer calls FETCH on C<$tied>. - -=item * - -C was not setting the scalar flags correctly when reading from -shared memory, causing the existing cached numeric representation in the -scalar to persist [perl #98480]. - -=item * - -Weakening the first argument to an automatically-invoked C method -could result in erroneous "DESTROY created new reference" errors or -crashes. Now it is an error to weaken a read-only reference. - -=item * - -Under miniperl (used to configure modules when perl itself is built), -C now clears %ENV before calling csh, since the latter croaks on some -systems if it does not like the contents of the LS_COLORS enviroment -variable [perl #98662]. - -=item * - -C<++> and C<--> now work on copies of globs, instead of dying. - -=item * - -The subroutines in the CORE:: namespace that were introduced in the -previous development release run with the lexical hints (strict, warnings) -of the caller, just as though the built-in function had been called. But -this was not the case for C. The CORE sub would end up -running with the lexical hints of the subroutine it replaced, instead of -that subroutine's caller. This has been fixed. - -=item * - -Stacked C<-l> (followed immediately by other filetest operators) did not -work previously; now it does. It is only permitted when the rightmost -filetest op has the special "_" handle for its argument and the most -recent C/C call was an C. - -=item * - -In Perl 5.6, C<-l> followed by anything other than a bareword would treat -its argument as a file name. That was changed in 5.8 for glob references -(C<\*foo>), but not for globs themselves (C<*foo>). Glob references -started being treated as file handles, but only if warnings were turned on. -In other words, it was simply buggy and inconsistent. Now the 5.6 -behaviour has been restored. +XXX =back @@ -891,7 +365,7 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.15.2..HEAD + perl Porting/acknowledgements.pl v5.15.3..HEAD =head1 Reporting Bugs