From: Dave Rolsky Date: Tue, 20 Dec 2011 21:30:25 +0000 (-0600) Subject: Create a perldelta for 5.15.7 X-Git-Tag: accepted/trunk/20130322.191538~1632 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=52deee2eb7a29bf84f790e7ae48c845143fc6940;p=platform%2Fupstream%2Fperl.git Create a perldelta for 5.15.7 --- diff --git a/MANIFEST b/MANIFEST index c71a1ab..30369c8 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4592,6 +4592,7 @@ pod/perl5152delta.pod Perl changes in version 5.15.2 pod/perl5153delta.pod Perl changes in version 5.15.3 pod/perl5154delta.pod Perl changes in version 5.15.4 pod/perl5155delta.pod Perl changes in version 5.15.5 +pod/perl5156delta.pod Perl changes in version 5.15.6 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 diff --git a/Makefile.SH b/Makefile.SH index 7b050fa..0bc9633 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -479,7 +479,7 @@ mini_obj = $(minindt_obj) $(MINIDTRACE_O) ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS) obj = $(ndt_obj) $(DTRACE_O) -perltoc_pod_prereqs = extra.pods pod/perl5156delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5157delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1055,8 +1055,8 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) $(Icwd) pod/perlmodlib.PL -q -pod/perl5156delta.pod: pod/perldelta.pod - $(LNS) perldelta.pod pod/perl5156delta.pod +pod/perl5157delta.pod: pod/perldelta.pod + $(LNS) perldelta.pod pod/perl5157delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` diff --git a/pod.lst b/pod.lst index deafb29..9e1a47e 100644 --- a/pod.lst +++ b/pod.lst @@ -136,6 +136,7 @@ h Miscellaneous perlhist Perl history records perldelta Perl changes since previous version + perl5157delta Perl changes in version 5.15.7 perl5156delta Perl changes in version 5.15.6 perl5155delta Perl changes in version 5.15.5 perl5154delta Perl changes in version 5.15.4 diff --git a/pod/.gitignore b/pod/.gitignore index d7e4cc5..fc57272 100644 --- a/pod/.gitignore +++ b/pod/.gitignore @@ -59,7 +59,7 @@ /roffitall # generated -/perl5156delta.pod +/perl5157delta.pod /perlapi.pod /perlintern.pod *.html diff --git a/pod/perl.pod b/pod/perl.pod index 6321dee..0f136e8 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -159,6 +159,7 @@ For ease of access, the Perl manual has been split up into several sections. perlhist Perl history records perldelta Perl changes since previous version + perl5156delta Perl changes in version 5.15.6 perl5155delta Perl changes in version 5.15.5 perl5154delta Perl changes in version 5.15.4 perl5153delta Perl changes in version 5.15.3 diff --git a/pod/perl5156delta.pod b/pod/perl5156delta.pod new file mode 100644 index 0000000..af13286 --- /dev/null +++ b/pod/perl5156delta.pod @@ -0,0 +1,946 @@ +=encoding utf8 + +=head1 NAME + +perl5156delta - what is new for perl v5.15.6 + +=head1 DESCRIPTION + +This document describes differences between the 5.15.5 release and the +5.15.6 release. + +If you are upgrading from an earlier release such as 5.15.4, first read +L, which describes differences between 5.15.4 and +5.15.5. + +=head1 Core Enhancements + +=head2 C<__SUB__> + +The new C<__SUB__> token, available under the "current_sub" feature +(see L) or C, returns a reference to the current +subroutine, making it easier to write recursive closures. + +=head2 New option for the debugger's B command + +The B command in the debugger, which toggles tracing mode, now +accepts a numeric argument that determines how many levels of +subroutine calls to trace. + +=head2 Return value of C + +The value returned by C on a tied variable is now the actual +scalar that holds the object to which the variable is tied. This +allows ties to be weakened with C. + +=head1 Security + +=head2 C + +The XS-callable function C, when presented with +malformed UTF-8 input, can read up to 12 bytes beyond the end of the +string. This cannot be fixed without changing its API. It is not +called from CPAN. The documentation now describes how to use it +safely. + +=head2 Other C functions, as well as C, etc. + +Most of the other XS-callable functions that take UTF-8 encoded input +implicitly assume that the UTF-8 is valid (not malformed) in regards to +buffer length. Do not do things such as change a character's case or +see if it is alphanumeric without first being sure that it is valid +UTF-8. This can be safely done for a whole string by using one of the +functions C, C, and +C. + +=head2 C> + +As of this release, version declarations like C now disable +all features before enabling the new feature bundle. This means that +the following holds true: + + use 5.016; + # 5.16 features enabled here + use 5.014; + # 5.16 features disabled here + +C and higher continue to enable strict, but explicit C and C now override the version declaration, even +when they come first: + + no strict; + use 5.012; + # no strict here + +There is a new ":default" feature bundle that represents the set of +features enabled before any version declaration or C has +been seen. Version declarations below 5.10 now enable the ":default" +feature set. This does not actually change the behaviour of C, because features added to the ":default" set are those that were +traditionally enabled by default, before they could be turned off. + +C<$[> is now disabled under C. It is part of the default +feature set and can be turned on or off explicitly with C. + +=head2 C + +The change to C in 5.15.2 has been reverted. It +now returns a stringified version object once more. + +=head2 C lvalue revamp + +When C is called in lvalue or potential lvalue context with two +or three arguments, a special lvalue scalar is returned that modifies +the original string (the first argument) when assigned to. + +Previously, the offsets (the second and third arguments) passed to +C would be converted immediately to match the string, negative +offsets being translated to positive and offsets beyond the end of the +string being truncated. + +Now, the offsets are recorded without modification in the special +lvalue scalar that is returned, and the original string is not even +looked at by C itself, but only when the returned lvalue is +read or modified. + +These changes result in several incompatible changes and bug fixes: + +=over + +=item * + +If the original string changes length after the call to C but +before assignment to its return value, negative offsets will remember +their position from the end of the string, affecting code like this: + + my $string = "string"; + my $lvalue = \substr $string, -4, 2; + print $lvalue, "\n"; # prints "ri" + $string = "bailing twine"; + print $lvalue, "\n"; # prints "wi"; used to print "il" + +The same thing happens with an omitted third argument. The returned +lvalue will always extend to the end of the string, even if the string +becomes longer. + +=item * + +Tied (and otherwise magical) variables are no longer exempt from the +"Attempt to use reference as lvalue in substr" warning. + +=item * + +That warning now occurs when the returned lvalue is assigned to, not +when C itself is called. This only makes a difference if the +return value of C is referenced and assigned to later. + +=item * + +The order in which "uninitialized" warnings occur for arguments to +C has changed. + +=item * + +Passing a substring of a read-only value or a typeglob to a function +(potential lvalue context) no longer causes an immediate "Can't coerce" +or "Modification of a read-only value" error. That error only occurs +if and when the value passed is assigned to. + +The same thing happens with the "substr outside of string" error. If +the lvalue is only read, not written to, it is now just a warning, as +with rvalue C. + +=item * + +C assignments no longer call FETCH twice if the first argument +is a tied variable, just once. + +=back + +It was impossible to fix all the bugs without an incompatible change, +and the behaviour of negative offsets was never specified, so the +change was deemed acceptable. + +=head2 Return value of C + +C returns C in scalar context or an empty list in list +context when there is a run-time error. When C was passed a +string in list context and a syntax error occurred, it used to return a +list containing a single undefined element. Now it returns an empty +list in list context for all errors [perl #80630]. + +=head2 Anonymous handles + +Automatically generated file handles are now named __ANONIO__ when the +variable name cannot be determined, rather than $__ANONIO__. + +=head2 Last-accessed filehandle + +Perl has an internal variable that stores the last filehandle to be +accessed. It is used by C<$.> and by C and C without +arguments. + +It used to be possible to set this internal variable to a glob copy and +then modify that glob copy to be something other than a glob, and still +have the last-accessed filehandle associated with the variable after +assigning a glob to it again: + + my $foo = *STDOUT; # $foo is a glob copy + <$foo>; # $foo is now the last-accessed handle + $foo = 3; # no longer a glob + $foo = *STDERR; # still the last-accessed handle + +Now the C<$foo = 3> assignment unsets that internal variable, so there +is no last-accessed filehandle, just as if C<< <$foo> >> had never +happened. + +=head2 XS API tweak + +The C C-level function, added in 5.15.4, now has a +C parameter. + +=head1 Performance Enhancements + +=over 4 + +=item * + +Perl 5.12.0 sped up the destruction of objects whose classes define +empty C methods (to prevent autoloading), by simply not +calling such empty methods. This release takes this optimisation a +step further, by not calling any C method that begins with a +C statement. This can be useful for destructors that are only +used for debugging: + + use constant DEBUG => 1; + sub DESTROY { return unless DEBUG; ... } + +Constant-folding will reduce the first statement to C if DEBUG +is set to 0, triggering this optimisation. + +=item * + +Assigning to a variable that holds a typeglob or copy-on-write scalar +is now much faster. Previously the typeglob would be stringified or +the copy-on-write scalar would be copied before being clobbered. + +=item * + +Assignment to C in void context is now more than twice its +previous speed. Instead of creating and returning a special lvalue +scalar that is then assigned to, C modifies the original string +itself. + +=back + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L has been upgraded from version 1.80 to version 1.82. + +Adjustments to handle files >8gb (>0777777777777 octal) and a feature +to return the MD5SUM of files in the archive. + +=item * + +L has been upgraded from version 5.71 to version 5.72. + +=item * + +L has been upgraded from version 1.16 to version 1.17. + +=item * + +L has been upgraded from version 1.09 to version 1.10. + +Various constructs that used to be deparsed incorrectly have been +fixed: + +=over + +=item C + +It used to deparse as C, which makes foo the sort +routine, rather than a regular function call. + +=item Keys and values in C<%^H> + +Undefined values in the hint hash were being deparsed as empty strings. +Whenever the hint hash changed, all undefined values, even those +unmodified, were being printed. + +Special characters, such as quotation marks, were not being escaped +properly. + +Some values used to be omitted if, for instance, a key was the same as +a previous value and vice versa. + +=item "method BLOCK" syntax + +C used to be deparsed as something like C<< do{ $expr +}->method >>, but the latter puts the $expr in scalar context, whereas +the former puts in list context. + +=item C and C + +These are both variants of do-file syntax, but were being deparsed as +do-blocks. + +=item Keywords that do not follow the llaf rule + +Keywords like C and C that do not follow the +looks-like-a-function rule are now deparsed correctly with parentheses +in the right place. + +Similarly, C, which I follow the llaf rule, was being +deparsed as though it does not. + +=item C<=~> + +In various cases, B::Deparse started adding a spurious C<$_ =~> before +the right-hand side in Perl 5.14; e.g., C<< "" =~ <$a> >> would become +C<< "" =~ ($_ =~ <$a>) >>. + +=item C + +C, C and other functions that autovivify handles used to +omit C from C. + +=item Negated single-letter subroutine calls + +Negated subroutine calls like C<- f()> and C<-(f())> were being +deparsed as file test operators. + +=item C<&{&}> + +C<&{&}> and C<& &>, which are calls to the subroutine named "&", +believe it or not, were being deparsed as C<&&>. + +=item C + +In Perl 5.14, C followed by any binary operator started +deparsing as C. + +=back + +=item * + +L has been upgraded from version 1.23 to version 1.24. + +It now tacks the last-accessed filehandle and line number on to the end +of the error message, just like C [perl #96672]. + +=item * + +L has been upgraded from version 2.042 to version +2.045. + +=item * + +L has been upgraded from version 2.042 to version +2.045. + +=item * + +L has been upgraded from version 0.004 to version +0.005. + +=item * + +L has been upgraded from version 0.9112 to version 0.9114. + +=item * + +L has been upgraded from version 2.134 to version 2.135. + +The XS implementation has been updated to account for the Unicode +symbol changes in Perl 5.15.4. It also knows how to output typeglobs +with nulls in their names. + +=item * + +L has been upgraded from version 1.25 to version 1.26. + +It now understands the "%X" format code, which some error messages +started using in Perl 5.14.0. + +=item * + +L has been upgraded from version 5.63 to version 5.70. + +Added BITS mode to the addfile method and shasum. This makes +partial-byte inputs possible via files/STDIN and allows shasum to check +all 8074 NIST Msg vectors, where previously special programming was +required to do this. + +=item * + +L has been upgraded from version 5.65 to version 5.66. + +It no longer tries to localise C<$_> unnecessarily. + +=item * + +L has been upgraded from version 3.05 to version +3.07. + +=item * + +L has been upgraded from version 2.042 to version +2.046. + +Added zipdetails utility. + +=item * + +L has been upgraded from version 3.18 to version 3.20. + +The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now +support retired codes. All codesets may be specified by a constant or +by their name now. Previously, they were specified only by a constant. + +The alias_code function exists for backward compatibility. It has been +replaced by rename_country_code. The alias_code function will be +removed some time after September, 2013. + +All work is now done in the central module (Locale::Codes). +Previously, some was still done in the wrapper modules +(Locale::Codes::*). Added Language Family codes (langfam) as defined +in ISO 639-5. + +=item * + +L has been upgraded from version 2.58 to version +2.59. + +=item * + +L has been upgraded from version 0.06 to version 0.08. + +=item * + +L has been upgraded from version 0.59 to version 0.60. + +Added another LaTeX escape: --- => -{}-{}- + +Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to +LaTeX, which then proceeds to replace it with a single -. This patch +replaces ----- with -{}-{}-{}-{}- + +=item * + +L has been upgraded from version 1.26 to version 1.27. + +It no longer produces a "Constant subroutine TCSANOW redefined" warning +on Windows. + +This bug was introduced in Perl 5.15.3. + +=item * + +L has been upgraded from version 1.94_02 to version 1.97. + +=item * + +L has been upgraded from version 1.85 to version 1.86. + +=item * + +L has been upgraded from version 0.85 to version +0.87. + +Tailored compatibility ideographs as well as unified ideographs for the +locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke. + +Locale/*.pl files are now searched for in @INC. + +=item * + +L has been upgraded from version 1.10 to version 1.11. + +Documentation change clarifies return values from UNIVERSAL::VERSION. + +=back + +=head2 Removed Modules and Pragmata + +=over 4 + +=item * + +Changing the case of a UTF-8 encoded string under C now +gives better, but still imperfect, results. Previously, such a string +would entirely lose locale semantics and silently be treated as +Unicode. Now, the code points that are less than 256 are treated with +locale rules, while those above 255 are, of course, treated as Unicode. + See L for more details, including the deficiencies of +this scheme. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +=head3 L + +=over 4 + +=item * + +The example function for checking for taintedness contained a subtle +error. C<$@> needs to be localized to prevent its changing this +global's value outside the function. The preferred method to check for +this remains L. + +=back + +=head1 Diagnostics + +=head2 Changes to Existing Diagnostics + +=over 4 + +=item * + +Redefinition warnings for constant subroutines used to be mandatory, +even occurring under C. Now they respect the L +pragma. + +=item * + +The "Attempt to free non-existent shared string" has had the spelling +of "non-existent" corrected to "nonexistent". It was already listed +with the correct spelling in L. + +=item * + +The 'Use of "foo" without parentheses is ambiguous' warning has been +extended to apply also to user-defined subroutines with a (;$) +prototype, and not just to built-in functions. + +=item * + +The error messages for using C and C outside of a +topicalizer have been standardised to match the messages for +C and loop controls. They now read 'Can't "default" outside +a topicalizer' and 'Can't "when" outside a topicalizer'. They both +used to be 'Can't use when() outside a topicalizer' [perl #91514]. + +=back + +=head1 Utility Changes + +=head3 L + +=over 4 + +=item * + +L displays information about the internal record structure +of the zip file. It is not concerned with displaying any details of +the compressed data stored in the zip file. + +=back + +=head1 Configuration and Compilation + +=over 4 + +=item * + +F is now built by F, instead of being +shipped with the distribution. Its list of manpages is now generated +(and therefore current). See also RT #103202 for an unresolved related +issue. + +=item * + +Perl 5.15.5 had a bug in its installation script, which did not install +F. This has been corrected [perl #104226]. + +=item * + +The man page for C is no longer installed. C +is a test module which is not installed, hence installing its +documentation makes no sense. + +=for 5.16.0 Merge this with the entry for "Stop installing XS::APItest*" + +=item * + +The man pages for the perl FAQ, L, L and L +are once again correctly installed in F, not F + +=for 5.16.0 This isn't a regression from 5.14.x, so don't mention this. + +=item * + +The -Dusesitecustomize and -Duserelocatableinc options now work +together properly. + +=back + +=head1 Testing + +=over 4 + +=item * + +The F and F scripts for testing C have +been moved under F, where they were originally. They had been +moved under F along with the substitution tests when that +directory was created. + +=back + +=head1 Platform Support + +=head2 Platform-Specific Notes + +=head3 VMS + +=over 4 + +=item * + +A link-time error on VMS versions without C support was +introduced in 5.15.1, but has now been corrected. + +=item * + +Explicit support for VMS versions prior to v7.0 and DEC C versions +prior to v6.0 has been removed. + +=item * + +Since Perl 5.10.1, the home-grown C wrapper has been unable to +distinguish between a directory name containing an underscore and an +otherwise-identical filename containing a dot in the same position +(e.g., t/test_pl as a directory and t/test.pl as a file). This problem +has been corrected. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +RT #78266: The regex engine has been leaking memory when accessing +named captures that weren't matched as part of a regex ever since 5.10 +when they were introduced, e.g. this would consume over a hundred MB of +memory: + + for (1..10_000_000) { + if ("foo" =~ /(foo|(?bar))?/) { + my $capture = $+{capture} + } + } + system "ps -o rss $$"' + +=item * + +A constant subroutine assigned to a glob whose name contains a null +will no longer cause extra globs to pop into existence when the +constant is referenced under its new name. + +=item * + +C was not treating C and C as equivalent when +such a sub was provided as the comparison routine. It used to croak on +C. + +=item * + +Subroutines from the C namespace are once more exempt from +redefinition warnings. This used to work in 5.005, but was broken in +5.6 for most subroutines. For subs created via XS that redefine +subroutines from the C package, this stopped working in 5.10. + +=item * + +New XSUBs now produce redefinition warnings if they overwrite existing +subs, as they did in 5.8.x. (The C logic was reversed in +5.10-14. Only subroutines from the C namespace would warn +when clobbered.) + +=item * + +Redefinition warnings triggered by the creation of XSUBs now respect +Unicode glob names, instead of using the internal representation. This +was missed in 5.15.4, partly because this warning was so hard to +trigger. (See the previous item.) + +=item * + +C used to use compile-time warning hints, instead of +run-time hints. The following code should never produce a redefinition +warning, but it used to, if C redefined an existing +subroutine: + + use warnings; + BEGIN { + no warnings; + some_XS_function_that_calls_new_CONSTSUB(); + } + +=item * + +Redefinition warnings for constant subroutines are on by default (what +are known as severe warnings in L). This was only the case +when it was a glob assignment or declaration of a Perl subroutine that +caused the warning. If the creation of XSUBs triggered the warning, it +was not a default warning. This has been corrected. + +=item * + +The internal check to see whether a redefinition warning should occur +used to emit "uninitialized" warnings in cases like this: + + use warnings "uninitialized"; + use constant {u => undef, v => undef}; + sub foo(){u} + sub foo(){v} + +=item * + +A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized" +warnings to report the wrong variable if the operator in question had +two operands and one was C<%{...}> or C<@{...}>. This has been fixed +[perl #103766]. + +=item * + +C<< version->new("version") >> and C no longer +crash [perl #102586]. + +=item * + +C<$tied =~ y/a/b/>, C and C now call FETCH +just once when $tied holds a reference. + +=item * + +Four-argument C no longer produces its "Non-string passed as +bitmask" warning on tied or tainted variables that are strings. + +=item * + +C now always calls FETCH on the buffer passed to it if the +buffer is tied. It used to skip the call if the tied variable happened +to hold a typeglob. + +=item * + +C<< $tied .= <> >> now calls FETCH once on C<$tied>. It used to call +it multiple times if the last value assigned to or returned from the +tied variable was anything other than a string or typeglob. + +=item * + +The C keyword added in 5.15.5 was respecting C +declarations from the outer scope, when it should have been ignoring +them. + +=item * + +C no longer crashes, but produces an error message, when +the unwinding of the current subroutine's scope fires a destructor that +undefines the subroutine being "goneto" [perl #99850]. + +=item * + +Arithmetic assignment (C<$left += $right>) involving overloaded objects +that rely on the 'nomethod' override no longer segfault when the left +operand is not overloaded. + +=item * + +Assigning C<__PACKAGE__> or any other shared hash key scalar to a stash +element no longer causes a double free. Regardless of this change, the +results of such assignments are still undefined. + +=item * + +Assigning C<__PACKAGE__> or another shared hash key string to a +variable no longer stops that variable from being tied if it happens to +be a PVMG or PVLV internally. + +=item * + +Creating a C sub no longer stops C<%+>, C<%-> and +C<%!> from working some of the time [perl #105024]. + +=item * + +When presented with malformed UTF-8 input, the XS-callable functions +C, C, and +C could read beyond the end of the input +string by up to 12 bytes. This no longer happens. [perl #32080]. +However, currently, C still has this defect, see +L above. + +=item * + +Doing a substitution on a tied variable returning a copy-on-write +scalar used to cause an assertion failure or an "Attempt to free +nonexistent shared string" warning. + +=item * + +A change in perl 5.15.4 caused C to produce malloc errors and +a crash with Perl's own malloc, and possibly with other malloc +implementations, too [perl #104034]. + +=item * + +A bug fix in 5.15.5 could sometimes result in assertion failures under +debugging builds of perl for certain syntax errors in C, such as +C + +=item * + +The "c [line num]" debugger command was broken by other debugger +changes released in 5.15.3. This is now fixed. + +=item * + +Breakpoints were not properly restored after a debugger restart using +the "R" command. This was broken in 5.15.3. This is now fixed. + +=item * + +The debugger prompt did not display the current line. This was broken +in 5.15.3. This is now fixed. + +=item * + +Class method calls still suffered from the Unicode bug with Latin-1 +package names. This was missed in the Unicode package name cleanup in +5.15.4 [perl #105922]. + +=item * + +The debugger no longer tries to do C when dumping data +structures. + +=item * + +Calling C where $fh is a glob copy (e.g., after C<$fh = +*STDOUT>), assigning something other than a glob to $fh, and then +freeing $fh (e.g., by leaving the scope where it is defined) no longer +causes the internal variable used by C<$.> (C) to point +to a freed scalar, that could be reused for some other glob, causing +C<$.> to use some unrelated filehandle [perl #97988]. + +=item * + +A regression in 5.14 caused these statements not to set the internal +variable that holds the handle used by C<$.>: + + my $fh = *STDOUT; + tell $fh; + eof $fh; + seek $fh, 0,0; + tell *$fh; + eof *$fh; + seek *$fh, 0,0; + readline *$fh; + +This is now fixed, but C still has the problem, and it +is not clear how to fix it [perl #106536]. + +=item * + +Version comparisons, such as those that happen implicitly with C, no longer cause locale settings to change [perl #105784]. + +=item * + +F, which generates L, put path names in the +L file. This bug was introduced in 5.15.1. + +=back + +=head1 Acknowledgments + +Perl 5.15.6 represents approximately 2 months of development since Perl +5.15.5 and contains approximately 48,000 lines of changes across 560 +files from 36 authors. + +Perl continues to flourish into its third decade thanks to a vibrant +community of users and developers. The following people are known to +have contributed the improvements that became Perl 5.15.6: + +Aaron Crane, Abhijit Menon-Sen, Alexandr Ciornii, Brian Fraser, Carl +Hayter, Chris 'BinGOs' Williams, Craig A. Berry, Dave Rolsky, David +Golden, David Mitchell, Dominic Hargreaves, Father Chrysostomos, James +E Keenan, Johannes Plunien, John Peacock, Karl Williamson, Marc Green, +Mark Dootson, Matthew Horsfall, Nicholas Clark, Paul Evans, Peter +Martini, Peter Scott, Rafael Garcia-Suarez, Reini Urban, Ricardo +Signes, Rodolfo Carvalho, Shlomi Fish, Steffen Müller, Steve Hay, +Steve Peters, Thomas Sibley, Timothe Litt, Tony Cook, Vadim Konovalov, +Ævar Arnfjörð Bjarmason. + +The list above is almost certainly incomplete as it is automatically +generated from version control history. In particular, it does not +include the names of the (very much appreciated) contributors who +reported issues to the Perl bug tracker. + +Many of the changes included in this version originated in the CPAN +modules included in Perl's core. We're grateful to the entire CPAN +community for helping Perl to flourish. + +For a more complete list of all of Perl's historical contributors, +please see the F file in the Perl source distribution. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the articles +recently posted to the comp.lang.perl.misc newsgroup and the perl bug +database at http://rt.perl.org/perlbug/ . There may also be +information at http://www.perl.org/ , the Perl Home Page. + +If you believe you have an unreported bug, please run the L +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. + +If the bug you are reporting has security implications, which make it +inappropriate to send to a publicly archived mailing list, then please +send it to perl5-security-report@perl.org. This points to a closed +subscription unarchived mailing list, which includes all the core +committers, who will be able to help assess the impact of issues, +figure out a resolution, and help co-ordinate the release of patches to +mitigate or fix the problem across all platforms on which Perl is +supported. Please only use this address for security issues in the +Perl core, not for modules independently distributed on CPAN. + +=head1 SEE ALSO + +The F file for an explanation of how to view exhaustive +details on what changed. + +The F file for how to build Perl. + +The F file for general stuff. + +The F and F files for copyright information. + +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a57f041..89ad8d7 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,940 +2,390 @@ =head1 NAME -perldelta - what is new for perl v5.15.6 +[ this is a template for a new perldelta file. Any text flagged as +XXX needs to be processed before release. ] -=head1 DESCRIPTION +perldelta - what is new for perl v5.15.7 -This document describes differences between the 5.15.5 release and the -5.15.6 release. +=head1 DESCRIPTION -If you are upgrading from an earlier release such as 5.15.4, first read -L, which describes differences between 5.15.4 and -5.15.5. +This document describes differences between the 5.15.6 release and +the 5.15.7 release. -=head1 Core Enhancements +If you are upgrading from an earlier release such as 5.15.5, first read +L, which describes differences between 5.15.5 and +5.15.6. -=head2 C<__SUB__> +=head1 Notice -The new C<__SUB__> token, available under the "current_sub" feature -(see L) or C, returns a reference to the current -subroutine, making it easier to write recursive closures. +XXX Any important notices here -=head2 New option for the debugger's B command - -The B command in the debugger, which toggles tracing mode, now -accepts a numeric argument that determines how many levels of -subroutine calls to trace. +=head1 Core Enhancements -=head2 Return value of C +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. -The value returned by C on a tied variable is now the actual -scalar that holds the object to which the variable is tied. This -allows ties to be weakened with C. +[ List each enhancement as a =head2 entry ] =head1 Security -=head2 C - -The XS-callable function C, when presented with -malformed UTF-8 input, can read up to 12 bytes beyond the end of the -string. This cannot be fixed without changing its API. It is not -called from CPAN. The documentation now describes how to use it -safely. - -=head2 Other C functions, as well as C, etc. - -Most of the other XS-callable functions that take UTF-8 encoded input -implicitly assume that the UTF-8 is valid (not malformed) in regards to -buffer length. Do not do things such as change a character's case or -see if it is alphanumeric without first being sure that it is valid -UTF-8. This can be safely done for a whole string by using one of the -functions C, C, and -C. - -=head2 C> +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L section. -As of this release, version declarations like C now disable -all features before enabling the new feature bundle. This means that -the following holds true: +[ List each security issue as a =head2 entry ] - use 5.016; - # 5.16 features enabled here - use 5.014; - # 5.16 features disabled here +=head1 Incompatible Changes -C and higher continue to enable strict, but explicit C and C now override the version declaration, even -when they come first: +XXX For a release on a stable branch, this section aspires to be: - no strict; - use 5.012; - # no strict here + There are no changes intentionally incompatible with 5.XXX.XXX + If any exist, they are bugs, and we request that you submit a + report. See L below. -There is a new ":default" feature bundle that represents the set of -features enabled before any version declaration or C has -been seen. Version declarations below 5.10 now enable the ":default" -feature set. This does not actually change the behaviour of C, because features added to the ":default" set are those that were -traditionally enabled by default, before they could be turned off. +[ List each incompatible change as a =head2 entry ] -C<$[> is now disabled under C. It is part of the default -feature set and can be turned on or off explicitly with C. +=head1 Deprecations -=head2 C - -The change to C in 5.15.2 has been reverted. It -now returns a stringified version object once more. - -=head2 C lvalue revamp - -When C is called in lvalue or potential lvalue context with two -or three arguments, a special lvalue scalar is returned that modifies -the original string (the first argument) when assigned to. - -Previously, the offsets (the second and third arguments) passed to -C would be converted immediately to match the string, negative -offsets being translated to positive and offsets beyond the end of the -string being truncated. - -Now, the offsets are recorded without modification in the special -lvalue scalar that is returned, and the original string is not even -looked at by C itself, but only when the returned lvalue is -read or modified. - -These changes result in several incompatible changes and bug fixes: - -=over - -=item * +XXX Any deprecated features, syntax, modules etc. should be listed here. +In particular, deprecated modules should be listed here even if they are +listed as an updated module in the L section. -If the original string changes length after the call to C but -before assignment to its return value, negative offsets will remember -their position from the end of the string, affecting code like this: +[ List each deprecation as a =head2 entry ] - my $string = "string"; - my $lvalue = \substr $string, -4, 2; - print $lvalue, "\n"; # prints "ri" - $string = "bailing twine"; - print $lvalue, "\n"; # prints "wi"; used to print "il" - -The same thing happens with an omitted third argument. The returned -lvalue will always extend to the end of the string, even if the string -becomes longer. - -=item * - -Tied (and otherwise magical) variables are no longer exempt from the -"Attempt to use reference as lvalue in substr" warning. - -=item * - -That warning now occurs when the returned lvalue is assigned to, not -when C itself is called. This only makes a difference if the -return value of C is referenced and assigned to later. - -=item * - -The order in which "uninitialized" warnings occur for arguments to -C has changed. +=head1 Performance Enhancements -=item * +XXX Changes which enhance performance without changing behaviour go here. There +may well be none in a stable release. -Passing a substring of a read-only value or a typeglob to a function -(potential lvalue context) no longer causes an immediate "Can't coerce" -or "Modification of a read-only value" error. That error only occurs -if and when the value passed is assigned to. +[ List each enhancement as a =item entry ] -The same thing happens with the "substr outside of string" error. If -the lvalue is only read, not written to, it is now just a warning, as -with rvalue C. +=over 4 =item * -C assignments no longer call FETCH twice if the first argument -is a tied variable, just once. +XXX =back -It was impossible to fix all the bugs without an incompatible change, -and the behaviour of negative offsets was never specified, so the -change was deemed acceptable. - -=head2 Return value of C - -C returns C in scalar context or an empty list in list -context when there is a run-time error. When C was passed a -string in list context and a syntax error occurred, it used to return a -list containing a single undefined element. Now it returns an empty -list in list context for all errors [perl #80630]. - -=head2 Anonymous handles - -Automatically generated file handles are now named __ANONIO__ when the -variable name cannot be determined, rather than $__ANONIO__. - -=head2 Last-accessed filehandle - -Perl has an internal variable that stores the last filehandle to be -accessed. It is used by C<$.> and by C and C without -arguments. - -It used to be possible to set this internal variable to a glob copy and -then modify that glob copy to be something other than a glob, and still -have the last-accessed filehandle associated with the variable after -assigning a glob to it again: - - my $foo = *STDOUT; # $foo is a glob copy - <$foo>; # $foo is now the last-accessed handle - $foo = 3; # no longer a glob - $foo = *STDERR; # still the last-accessed handle - -Now the C<$foo = 3> assignment unsets that internal variable, so there -is no last-accessed filehandle, just as if C<< <$foo> >> had never -happened. +=head1 Modules and Pragmata -=head2 XS API tweak +XXX All changes to installed files in F, F, F and F +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F, which prints stub +entries to STDOUT. Results can be pasted in place of the '=head2' entries +below. A paragraph summary for important changes should then be added by hand. +In an ideal world, dual-life modules would have a F file that could be +cribbed. -The C C-level function, added in 5.15.4, now has a -C parameter. +[ Within each section, list entries as a =item entry ] -=head1 Performance Enhancements +=head2 New Modules and Pragmata =over 4 =item * -Perl 5.12.0 sped up the destruction of objects whose classes define -empty C methods (to prevent autoloading), by simply not -calling such empty methods. This release takes this optimisation a -step further, by not calling any C method that begins with a -C statement. This can be useful for destructors that are only -used for debugging: - - use constant DEBUG => 1; - sub DESTROY { return unless DEBUG; ... } - -Constant-folding will reduce the first statement to C if DEBUG -is set to 0, triggering this optimisation. - -=item * - -Assigning to a variable that holds a typeglob or copy-on-write scalar -is now much faster. Previously the typeglob would be stringified or -the copy-on-write scalar would be copied before being clobbered. - -=item * - -Assignment to C in void context is now more than twice its -previous speed. Instead of creating and returning a special lvalue -scalar that is then assigned to, C modifies the original string -itself. +XXX =back -=head1 Modules and Pragmata - =head2 Updated Modules and Pragmata =over 4 =item * -L has been upgraded from version 1.80 to version 1.82. - -Adjustments to handle files >8gb (>0777777777777 octal) and a feature -to return the MD5SUM of files in the archive. - -=item * - -L has been upgraded from version 5.71 to version 5.72. - -=item * - -L has been upgraded from version 1.16 to version 1.17. - -=item * - -L has been upgraded from version 1.09 to version 1.10. - -Various constructs that used to be deparsed incorrectly have been -fixed: - -=over - -=item C - -It used to deparse as C, which makes foo the sort -routine, rather than a regular function call. - -=item Keys and values in C<%^H> - -Undefined values in the hint hash were being deparsed as empty strings. -Whenever the hint hash changed, all undefined values, even those -unmodified, were being printed. - -Special characters, such as quotation marks, were not being escaped -properly. - -Some values used to be omitted if, for instance, a key was the same as -a previous value and vice versa. - -=item "method BLOCK" syntax - -C used to be deparsed as something like C<< do{ $expr -}->method >>, but the latter puts the $expr in scalar context, whereas -the former puts in list context. - -=item C and C - -These are both variants of do-file syntax, but were being deparsed as -do-blocks. - -=item Keywords that do not follow the llaf rule - -Keywords like C and C that do not follow the -looks-like-a-function rule are now deparsed correctly with parentheses -in the right place. - -Similarly, C, which I follow the llaf rule, was being -deparsed as though it does not. - -=item C<=~> - -In various cases, B::Deparse started adding a spurious C<$_ =~> before -the right-hand side in Perl 5.14; e.g., C<< "" =~ <$a> >> would become -C<< "" =~ ($_ =~ <$a>) >>. - -=item C - -C, C and other functions that autovivify handles used to -omit C from C. - -=item Negated single-letter subroutine calls - -Negated subroutine calls like C<- f()> and C<-(f())> were being -deparsed as file test operators. - -=item C<&{&}> - -C<&{&}> and C<& &>, which are calls to the subroutine named "&", -believe it or not, were being deparsed as C<&&>. - -=item C - -In Perl 5.14, C followed by any binary operator started -deparsing as C. +L has been upgraded from version 0.69 to version 0.70. =back -=item * - -L has been upgraded from version 1.23 to version 1.24. - -It now tacks the last-accessed filehandle and line number on to the end -of the error message, just like C [perl #96672]. - -=item * - -L has been upgraded from version 2.042 to version -2.045. - -=item * - -L has been upgraded from version 2.042 to version -2.045. - -=item * - -L has been upgraded from version 0.004 to version -0.005. - -=item * - -L has been upgraded from version 0.9112 to version 0.9114. - -=item * - -L has been upgraded from version 2.134 to version 2.135. - -The XS implementation has been updated to account for the Unicode -symbol changes in Perl 5.15.4. It also knows how to output typeglobs -with nulls in their names. - -=item * - -L has been upgraded from version 1.25 to version 1.26. - -It now understands the "%X" format code, which some error messages -started using in Perl 5.14.0. - -=item * - -L has been upgraded from version 5.63 to version 5.70. - -Added BITS mode to the addfile method and shasum. This makes -partial-byte inputs possible via files/STDIN and allows shasum to check -all 8074 NIST Msg vectors, where previously special programming was -required to do this. - -=item * - -L has been upgraded from version 5.65 to version 5.66. - -It no longer tries to localise C<$_> unnecessarily. - -=item * - -L has been upgraded from version 3.05 to version -3.07. - -=item * - -L has been upgraded from version 2.042 to version -2.046. +=head2 Removed Modules and Pragmata -Added zipdetails utility. +=over 4 =item * -L has been upgraded from version 3.18 to version 3.20. - -The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now -support retired codes. All codesets may be specified by a constant or -by their name now. Previously, they were specified only by a constant. - -The alias_code function exists for backward compatibility. It has been -replaced by rename_country_code. The alias_code function will be -removed some time after September, 2013. +XXX -All work is now done in the central module (Locale::Codes). -Previously, some was still done in the wrapper modules -(Locale::Codes::*). Added Language Family codes (langfam) as defined -in ISO 639-5. - -=item * - -L has been upgraded from version 2.58 to version -2.59. +=back -=item * +=head1 Documentation -L has been upgraded from version 0.06 to version 0.08. +XXX Changes to files in F go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L. -=item * +=head2 New Documentation -L has been upgraded from version 0.59 to version 0.60. +XXX Changes which create B files in F go here. -Added another LaTeX escape: --- => -{}-{}- +=head3 L -Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to -LaTeX, which then proceeds to replace it with a single -. This patch -replaces ----- with -{}-{}-{}-{}- +XXX Description of the purpose of the new file here -=item * +=head2 Changes to Existing Documentation -L has been upgraded from version 1.26 to version 1.27. +XXX Changes which significantly change existing files in F go here. +However, any changes to F should go in the L +section. -It no longer produces a "Constant subroutine TCSANOW redefined" warning -on Windows. +=head3 L -This bug was introduced in Perl 5.15.3. +=over 4 =item * -L has been upgraded from version 1.94_02 to version 1.97. - -=item * +XXX Description of the change here -L has been upgraded from version 1.85 to version 1.86. +=back -=item * +=head1 Diagnostics -L has been upgraded from version 0.85 to version -0.87. +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L. -Tailored compatibility ideographs as well as unified ideographs for the -locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke. +XXX New or changed warnings emitted by the core's C code go here. Also +include any changes in L that reconcile it to the C code. -Locale/*.pl files are now searched for in @INC. +[ Within each section, list entries as a =item entry that links to perldiag, + e.g. -=item * + =item * -L has been upgraded from version 1.10 to version 1.11. + L +] -Documentation change clarifies return values from UNIVERSAL::VERSION. +=head2 New Diagnostics -=back +XXX Newly added diagnostic messages go here -=head2 Removed Modules and Pragmata +=head3 New Errors =over 4 =item * -Changing the case of a UTF-8 encoded string under C now -gives better, but still imperfect, results. Previously, such a string -would entirely lose locale semantics and silently be treated as -Unicode. Now, the code points that are less than 256 are treated with -locale rules, while those above 255 are, of course, treated as Unicode. - See L for more details, including the deficiencies of -this scheme. +XXX L =back -=head1 Documentation - -=head2 Changes to Existing Documentation - -=head3 L +=head3 New Warnings =over 4 =item * -The example function for checking for taintedness contained a subtle -error. C<$@> needs to be localized to prevent its changing this -global's value outside the function. The preferred method to check for -this remains L. +XXX L =back -=head1 Diagnostics - =head2 Changes to Existing Diagnostics -=over 4 - -=item * - -Redefinition warnings for constant subroutines used to be mandatory, -even occurring under C. Now they respect the L -pragma. - -=item * +XXX Changes (i.e. rewording) of diagnostic messages go here -The "Attempt to free non-existent shared string" has had the spelling -of "non-existent" corrected to "nonexistent". It was already listed -with the correct spelling in L. - -=item * - -The 'Use of "foo" without parentheses is ambiguous' warning has been -extended to apply also to user-defined subroutines with a (;$) -prototype, and not just to built-in functions. +=over 4 =item * -The error messages for using C and C outside of a -topicalizer have been standardised to match the messages for -C and loop controls. They now read 'Can't "default" outside -a topicalizer' and 'Can't "when" outside a topicalizer'. They both -used to be 'Can't use when() outside a topicalizer' [perl #91514]. +XXX Describe change here =back =head1 Utility Changes -=head3 L +XXX Changes to installed programs such as F and F go +here. Most of these are built within the directories F and F. -=over 4 +[ List utility changes as a =head3 entry for each utility and =item +entries for each change +Use L with program names to get proper documentation linking. ] -=item * - -L displays information about the internal record structure -of the zip file. It is not concerned with displaying any details of -the compressed data stored in the zip file. - -=back - -=head1 Configuration and Compilation +=head3 L =over 4 =item * -F is now built by F, instead of being -shipped with the distribution. Its list of manpages is now generated -(and therefore current). See also RT #103202 for an unresolved related -issue. - -=item * - -Perl 5.15.5 had a bug in its installation script, which did not install -F. This has been corrected [perl #104226]. - -=item * - -The man page for C is no longer installed. C -is a test module which is not installed, hence installing its -documentation makes no sense. +XXX -=for 5.16.0 Merge this with the entry for "Stop installing XS::APItest*" - -=item * - -The man pages for the perl FAQ, L, L and L -are once again correctly installed in F, not F - -=for 5.16.0 This isn't a regression from 5.14.x, so don't mention this. - -=item * +=back -The -Dusesitecustomize and -Duserelocatableinc options now work -together properly. +=head1 Configuration and Compilation -=back +XXX Changes to F, F, F, and analogous tools +go here. Any other changes to the Perl build process should be listed here. +However, any platform-specific changes should be listed in the +L section, instead. -=head1 Testing +[ List changes as a =item entry ]. =over 4 =item * -The F and F scripts for testing C have -been moved under F, where they were originally. They had been -moved under F along with the substitution tests when that -directory was created. +XXX =back -=head1 Platform Support +=head1 Testing -=head2 Platform-Specific Notes +XXX Any significant changes to the testing of a freshly built perl should be +listed here. Changes which create B files in F go here as do any +large changes to the testing harness (e.g. when parallel testing was added). +Changes to existing files in F aren't worth summarising, although the bugs +that they represent may be covered elsewhere. -=head3 VMS +[ List each test improvement as a =item entry ] =over 4 =item * -A link-time error on VMS versions without C support was -introduced in 5.15.1, but has now been corrected. - -=item * - -Explicit support for VMS versions prior to v7.0 and DEC C versions -prior to v6.0 has been removed. - -=item * - -Since Perl 5.10.1, the home-grown C wrapper has been unable to -distinguish between a directory name containing an underscore and an -otherwise-identical filename containing a dot in the same position -(e.g., t/test_pl as a directory and t/test.pl as a file). This problem -has been corrected. +XXX =back -=head1 Selected Bug Fixes - -=over 4 - -=item * - -RT #78266: The regex engine has been leaking memory when accessing -named captures that weren't matched as part of a regex ever since 5.10 -when they were introduced, e.g. this would consume over a hundred MB of -memory: - - for (1..10_000_000) { - if ("foo" =~ /(foo|(?bar))?/) { - my $capture = $+{capture} - } - } - system "ps -o rss $$"' - -=item * - -A constant subroutine assigned to a glob whose name contains a null -will no longer cause extra globs to pop into existence when the -constant is referenced under its new name. - -=item * - -C was not treating C and C as equivalent when -such a sub was provided as the comparison routine. It used to croak on -C. - -=item * - -Subroutines from the C namespace are once more exempt from -redefinition warnings. This used to work in 5.005, but was broken in -5.6 for most subroutines. For subs created via XS that redefine -subroutines from the C package, this stopped working in 5.10. - -=item * - -New XSUBs now produce redefinition warnings if they overwrite existing -subs, as they did in 5.8.x. (The C logic was reversed in -5.10-14. Only subroutines from the C namespace would warn -when clobbered.) - -=item * - -Redefinition warnings triggered by the creation of XSUBs now respect -Unicode glob names, instead of using the internal representation. This -was missed in 5.15.4, partly because this warning was so hard to -trigger. (See the previous item.) - -=item * - -C used to use compile-time warning hints, instead of -run-time hints. The following code should never produce a redefinition -warning, but it used to, if C redefined an existing -subroutine: - - use warnings; - BEGIN { - no warnings; - some_XS_function_that_calls_new_CONSTSUB(); - } - -=item * - -Redefinition warnings for constant subroutines are on by default (what -are known as severe warnings in L). This was only the case -when it was a glob assignment or declaration of a Perl subroutine that -caused the warning. If the creation of XSUBs triggered the warning, it -was not a default warning. This has been corrected. - -=item * - -The internal check to see whether a redefinition warning should occur -used to emit "uninitialized" warnings in cases like this: - - use warnings "uninitialized"; - use constant {u => undef, v => undef}; - sub foo(){u} - sub foo(){v} - -=item * - -A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized" -warnings to report the wrong variable if the operator in question had -two operands and one was C<%{...}> or C<@{...}>. This has been fixed -[perl #103766]. - -=item * - -C<< version->new("version") >> and C no longer -crash [perl #102586]. - -=item * - -C<$tied =~ y/a/b/>, C and C now call FETCH -just once when $tied holds a reference. - -=item * - -Four-argument C no longer produces its "Non-string passed as -bitmask" warning on tied or tainted variables that are strings. - -=item * - -C now always calls FETCH on the buffer passed to it if the -buffer is tied. It used to skip the call if the tied variable happened -to hold a typeglob. +=head1 Platform Support -=item * +XXX Any changes to platform support should be listed in the sections below. -C<< $tied .= <> >> now calls FETCH once on C<$tied>. It used to call -it multiple times if the last value assigned to or returned from the -tied variable was anything other than a string or typeglob. +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -=item * +=head2 New Platforms -The C keyword added in 5.15.5 was respecting C -declarations from the outer scope, when it should have been ignoring -them. +XXX List any platforms that this version of perl compiles on, that previous +versions did not. These will either be enabled by new files in the F +directories, or new subdirectories and F files at the top level of the +source tree. -=item * +=over 4 -C no longer crashes, but produces an error message, when -the unwinding of the current subroutine's scope fires a destructor that -undefines the subroutine being "goneto" [perl #99850]. +=item XXX-some-platform -=item * +XXX -Arithmetic assignment (C<$left += $right>) involving overloaded objects -that rely on the 'nomethod' override no longer segfault when the left -operand is not overloaded. +=back -=item * +=head2 Discontinued Platforms -Assigning C<__PACKAGE__> or any other shared hash key scalar to a stash -element no longer causes a double free. Regardless of this change, the -results of such assignments are still undefined. +XXX List any platforms that this version of perl no longer compiles on. -=item * +=over 4 -Assigning C<__PACKAGE__> or another shared hash key string to a -variable no longer stops that variable from being tied if it happens to -be a PVMG or PVLV internally. +=item XXX-some-platform -=item * +XXX -Creating a C sub no longer stops C<%+>, C<%-> and -C<%!> from working some of the time [perl #105024]. +=back -=item * +=head2 Platform-Specific Notes -When presented with malformed UTF-8 input, the XS-callable functions -C, C, and -C could read beyond the end of the input -string by up to 12 bytes. This no longer happens. [perl #32080]. -However, currently, C still has this defect, see -L above. +XXX List any changes for specific platforms. This could include configuration +and compilation changes or changes in portability/compatibility. However, +changes within modules for platforms should generally be listed in the +L section. -=item * +=over 4 -Doing a substitution on a tied variable returning a copy-on-write -scalar used to cause an assertion failure or an "Attempt to free -nonexistent shared string" warning. +=item XXX-some-platform -=item * +XXX -A change in perl 5.15.4 caused C to produce malloc errors and -a crash with Perl's own malloc, and possibly with other malloc -implementations, too [perl #104034]. +=back -=item * +=head1 Internal Changes -A bug fix in 5.15.5 could sometimes result in assertion failures under -debugging builds of perl for certain syntax errors in C, such as -C +XXX Changes which affect the interface available to C code go here. +Other significant internal changes for future core maintainers should +be noted as well. -=item * +[ List each change as a =item entry ] -The "c [line num]" debugger command was broken by other debugger -changes released in 5.15.3. This is now fixed. +=over 4 =item * -Breakpoints were not properly restored after a debugger restart using -the "R" command. This was broken in 5.15.3. This is now fixed. +XXX -=item * +=back -The debugger prompt did not display the current line. This was broken -in 5.15.3. This is now fixed. +=head1 Selected Bug Fixes -=item * +XXX Important bug fixes in the core language are summarised here. +Bug fixes in files in F and F are best summarised in +L. -Class method calls still suffered from the Unicode bug with Latin-1 -package names. This was missed in the Unicode package name cleanup in -5.15.4 [perl #105922]. +[ List each fix as a =item entry ] -=item * - -The debugger no longer tries to do C when dumping data -structures. +=over 4 =item * -Calling C where $fh is a glob copy (e.g., after C<$fh = -*STDOUT>), assigning something other than a glob to $fh, and then -freeing $fh (e.g., by leaving the scope where it is defined) no longer -causes the internal variable used by C<$.> (C) to point -to a freed scalar, that could be reused for some other glob, causing -C<$.> to use some unrelated filehandle [perl #97988]. +XXX -=item * +=back -A regression in 5.14 caused these statements not to set the internal -variable that holds the handle used by C<$.>: +=head1 Known Problems - my $fh = *STDOUT; - tell $fh; - eof $fh; - seek $fh, 0,0; - tell *$fh; - eof *$fh; - seek *$fh, 0,0; - readline *$fh; +XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any +tests that had to be Ced for the release would be noted here, unless +they were specific to a particular platform (see below). -This is now fixed, but C still has the problem, and it -is not clear how to fix it [perl #106536]. +This is a list of some significant unfixed bugs, which are regressions +from either 5.XXX.XXX or 5.XXX.XXX. -=item * +[ List each fix as a =item entry ] -Version comparisons, such as those that happen implicitly with C, no longer cause locale settings to change [perl #105784]. +=over 4 =item * -F, which generates L, put path names in the -L file. This bug was introduced in 5.15.1. +XXX =back -=head1 Acknowledgments - -Perl 5.15.6 represents approximately 2 months of development since Perl -5.15.5 and contains approximately 48,000 lines of changes across 560 -files from 36 authors. - -Perl continues to flourish into its third decade thanks to a vibrant -community of users and developers. The following people are known to -have contributed the improvements that became Perl 5.15.6: +=head1 Obituary -Aaron Crane, Abhijit Menon-Sen, Alexandr Ciornii, Brian Fraser, Carl -Hayter, Chris 'BinGOs' Williams, Craig A. Berry, Dave Rolsky, David -Golden, David Mitchell, Dominic Hargreaves, Father Chrysostomos, James -E Keenan, Johannes Plunien, John Peacock, Karl Williamson, Marc Green, -Mark Dootson, Matthew Horsfall, Nicholas Clark, Paul Evans, Peter -Martini, Peter Scott, Rafael Garcia-Suarez, Reini Urban, Ricardo -Signes, Rodolfo Carvalho, Shlomi Fish, Steffen Müller, Steve Hay, -Steve Peters, Thomas Sibley, Timothe Litt, Tony Cook, Vadim Konovalov, -Ævar Arnfjörð Bjarmason. +XXX If any significant core contributor has died, we've added a short obituary +here. -The list above is almost certainly incomplete as it is automatically -generated from version control history. In particular, it does not -include the names of the (very much appreciated) contributors who -reported issues to the Perl bug tracker. +=head1 Acknowledgements -Many of the changes included in this version originated in the CPAN -modules included in Perl's core. We're grateful to the entire CPAN -community for helping Perl to flourish. +XXX Generate this with: -For a more complete list of all of Perl's historical contributors, -please see the F file in the Perl source distribution. + perl Porting/acknowledgements.pl v5.15.6..HEAD =head1 Reporting Bugs If you find what you think is a bug, you might check the articles -recently posted to the comp.lang.perl.misc newsgroup and the perl bug -database at http://rt.perl.org/perlbug/ . There may also be +recently posted to the comp.lang.perl.misc newsgroup and the perl +bug database at http://rt.perl.org/perlbug/ . There may also be information at http://www.perl.org/ , the Perl Home Page. If you believe you have an unreported bug, please run the L -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. +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. If the bug you are reporting has security implications, which make it -inappropriate to send to a publicly archived mailing list, then please -send it to perl5-security-report@perl.org. This points to a closed -subscription unarchived mailing list, which includes all the core -committers, who will be able to help assess the impact of issues, -figure out a resolution, and help co-ordinate the release of patches to -mitigate or fix the problem across all platforms on which Perl is -supported. Please only use this address for security issues in the -Perl core, not for modules independently distributed on CPAN. +inappropriate to send to a publicly archived mailing list, then please send +it to perl5-security-report@perl.org. This points to a closed subscription +unarchived mailing list, which includes +all the core committers, who will be able +to help assess the impact of issues, figure out a resolution, and help +co-ordinate the release of patches to mitigate or fix the problem across all +platforms on which Perl is supported. Please only use this address for +security issues in the Perl core, not for modules independently +distributed on CPAN. =head1 SEE ALSO -The F file for an explanation of how to view exhaustive -details on what changed. +The F file for an explanation of how to view exhaustive details +on what changed. The F file for how to build Perl. diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 9a3c831..c90bc45 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -345,7 +345,7 @@ x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl5156delta.pod +PERLDELTA_CURRENT = [.pod]perl5157delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(MMS$TARGET) diff --git a/win32/Makefile b/win32/Makefile index 1aeeb6c..84986c9 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1075,7 +1075,7 @@ utils: $(PERLEXE) $(X2P) copy ..\README.vmesa ..\pod\perlvmesa.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5156delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5157delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(PERLEXE) $(ICWD) ..\autodoc.pl .. @@ -1168,7 +1168,7 @@ distclean: realclean -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5156delta.pod perlaix.pod perlamiga.pod perlapi.pod \ + perl5157delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \ perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ diff --git a/win32/makefile.mk b/win32/makefile.mk index 98afa95..52d91cc 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1261,7 +1261,7 @@ utils: $(PERLEXE) $(X2P) copy ..\README.vmesa ..\pod\perlvmesa.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5156delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5157delta.pod $(PERLEXE) $(PL2BAT) $(UTILS) $(PERLEXE) $(ICWD) ..\autodoc.pl .. $(PERLEXE) $(ICWD) ..\pod\perlmodlib.pl -q @@ -1353,7 +1353,7 @@ distclean: realclean -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5156delta.pod perlaix.pod perlamiga.pod perlapi.pod \ + perl5157delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \ perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ diff --git a/win32/pod.mak b/win32/pod.mak index 94c1631..12da085 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -35,6 +35,7 @@ POD = perl.pod \ perl5154delta.pod \ perl5155delta.pod \ perl5156delta.pod \ + perl5157delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -159,6 +160,7 @@ MAN = perl.man \ perl5154delta.man \ perl5155delta.man \ perl5156delta.man \ + perl5157delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -283,6 +285,7 @@ HTML = perl.html \ perl5154delta.html \ perl5155delta.html \ perl5156delta.html \ + perl5157delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -407,6 +410,7 @@ TEX = perl.tex \ perl5154delta.tex \ perl5155delta.tex \ perl5156delta.tex \ + perl5157delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \