diff options
-rw-r--r-- | MANIFEST | 1 | ||||
-rwxr-xr-x | Makefile.SH | 6 | ||||
-rw-r--r-- | pod.lst | 1 | ||||
-rw-r--r-- | pod/.gitignore | 2 | ||||
-rw-r--r-- | pod/perl.pod | 1 | ||||
-rw-r--r-- | pod/perl5156delta.pod | 946 | ||||
-rw-r--r-- | pod/perldelta.pod | 924 | ||||
-rw-r--r-- | vms/descrip_mms.template | 2 | ||||
-rw-r--r-- | win32/Makefile | 4 | ||||
-rw-r--r-- | win32/makefile.mk | 4 | ||||
-rw-r--r-- | win32/pod.mak | 4 |
11 files changed, 1149 insertions, 746 deletions
@@ -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 7b050fae66..0bc963378f 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` @@ -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 d7e4cc53a9..fc5727234f 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 6321dee05a..0f136e8b0d 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 0000000000..af132860b5 --- /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<perl5155delta>, 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<feature>) or C<use v5.15>, returns a reference to the current +subroutine, making it easier to write recursive closures. + +=head2 New option for the debugger's B<t> command + +The B<t> 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<tied> + +The value returned by C<tied> 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<Scalar::Util::weaken(tied +$tied_variable)>. + +=head1 Security + +=head2 C<is_utf8_char()> + +The XS-callable function C<is_utf8_char()>, 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<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, 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<is_utf8_string()>, C<is_utf8_string_loc()>, and +C<is_utf8_string_loclen()>. + +=head2 C<use I<VERSION>> + +As of this release, version declarations like C<use v5.16> 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<use v5.12> and higher continue to enable strict, but explicit C<use +strict> and C<no strict> 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<use feature> has +been seen. Version declarations below 5.10 now enable the ":default" +feature set. This does not actually change the behaviour of C<use +v5.8>, 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<use v5.16>. It is part of the default +feature set and can be turned on or off explicitly with C<use feature +'array_base'>. + +=head2 C<UNIVERSAL::VERSION> + +The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted. It +now returns a stringified version object once more. + +=head2 C<substr> lvalue revamp + +When C<substr> 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<substr> 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<substr> 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<substr> 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<substr> itself is called. This only makes a difference if the +return value of C<substr> is referenced and assigned to later. + +=item * + +The order in which "uninitialized" warnings occur for arguments to +C<substr> 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<substr>. + +=item * + +C<substr> 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<eval> + +C<eval> returns C<undef> in scalar context or an empty list in list +context when there is a run-time error. When C<eval> 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<tell> and C<eof> 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<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a +C<len> parameter. + +=head1 Performance Enhancements + +=over 4 + +=item * + +Perl 5.12.0 sped up the destruction of objects whose classes define +empty C<DESTROY> methods (to prevent autoloading), by simply not +calling such empty methods. This release takes this optimisation a +step further, by not calling any C<DESTROY> method that begins with a +C<return> 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<return;> 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<substr> 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<substr> modifies the original string +itself. + +=back + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L<Archive::Tar> 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<AutoLoader> has been upgraded from version 5.71 to version 5.72. + +=item * + +L<B::Debug> has been upgraded from version 1.16 to version 1.17. + +=item * + +L<B::Deparse> 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<sort(foo(bar))> + +It used to deparse as C<sort foo(bar)>, 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<method { $expr }> 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<do +{}> and C<do({})> + +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<return> and C<last> that do not follow the +looks-like-a-function rule are now deparsed correctly with parentheses +in the right place. + +Similarly, C<not>, which I<does> 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<open local *FH> + +C<open>, C<pipe> and other functions that autovivify handles used to +omit C<local *> from C<local *FH>. + +=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<require $this + $that> + +In Perl 5.14, C<require> followed by any binary operator started +deparsing as C<no>. + +=back + +=item * + +L<Carp> 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<die> [perl #96672]. + +=item * + +L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version +2.045. + +=item * + +L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version +2.045. + +=item * + +L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version +0.005. + +=item * + +L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9114. + +=item * + +L<Data::Dumper> 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<diagnostics> 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<Digest::SHA> 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<Exporter> has been upgraded from version 5.65 to version 5.66. + +It no longer tries to localise C<$_> unnecessarily. + +=item * + +L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version +3.07. + +=item * + +L<IO::Compress::Base> has been upgraded from version 2.042 to version +2.046. + +Added zipdetails utility. + +=item * + +L<Locale::Codes> 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<Module::CoreList> has been upgraded from version 2.58 to version +2.59. + +=item * + +L<Module::Loaded> has been upgraded from version 0.06 to version 0.08. + +=item * + +L<Pod::LaTeX> 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<POSIX> 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<Socket> has been upgraded from version 1.94_02 to version 1.97. + +=item * + +L<threads> has been upgraded from version 1.85 to version 1.86. + +=item * + +L<Unicode::Collate> 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<UNIVERSAL> 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<use locale> 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<perlfunc/lc> for more details, including the deficiencies of +this scheme. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +=head3 L<perlsec/Laundering and Detecting Tainted Data> + +=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<Scalar::Util/tainted>. + +=back + +=head1 Diagnostics + +=head2 Changes to Existing Diagnostics + +=over 4 + +=item * + +Redefinition warnings for constant subroutines used to be mandatory, +even occurring under C<no warnings>. Now they respect the L<warnings> +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<perldiag>. + +=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<default> and C<when> outside of a +topicalizer have been standardised to match the messages for +C<continue> 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<zipdetails> + +=over 4 + +=item * + +L<zipdetails> 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<pod/roffitall> is now built by F<pod/buildtoc>, 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<unicore/Name.pm>. This has been corrected [perl #104226]. + +=item * + +The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap> +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<perlxs>, L<perlxstut> and L<perldoc> +are once again correctly installed in F<man1>, not F<man3> + +=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<substr.t> and F<substr_thr.t> scripts for testing C<substr> have +been moved under F<t/op/>, where they were originally. They had been +moved under F<t/re/> 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<symlink> 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<stat> 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|(?<capture>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<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when +such a sub was provided as the comparison routine. It used to croak on +C<sub {()}>. + +=item * + +Subroutines from the C<autouse> 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<autouse> 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<autouse> logic was reversed in +5.10-14. Only subroutines from the C<autouse> 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<newCONSTSUB> 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<newCONSTSUB> 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<perldiag>). 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<printf "%vd", "version"> no longer +crash [perl #102586]. + +=item * + +C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH +just once when $tied holds a reference. + +=item * + +Four-argument C<select> now always calls FETCH on tied arguments. It +used to skip the call if the tied argument happened to hold C<undef> or +a typeglob. + +=item * + +Four-argument C<select> no longer produces its "Non-string passed as +bitmask" warning on tied or tainted variables that are strings. + +=item * + +C<sysread> 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<evalbytes> keyword added in 5.15.5 was respecting C<use utf8> +declarations from the outer scope, when it should have been ignoring +them. + +=item * + +C<goto &func> 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<UNIVERSAL::AUTOLOAD> 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<is_utf8_string()>, C<is_utf8_string_loc()>, and +C<is_utf8_string_loclen()> could read beyond the end of the input +string by up to 12 bytes. This no longer happens. [perl #32080]. +However, currently, C<is_utf8_char()> still has this defect, see +L</is_utf8_char()> 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<caller()> 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<eval>, such as +C<eval q|""!=!~//|> + +=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<local $_> when dumping data +structures. + +=item * + +Calling C<readline($fh)> 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<PL_last_in_gv>) 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<tell *{ *$fh }> 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<use +v5.43>, no longer cause locale settings to change [perl #105784]. + +=item * + +F<pod/buildtoc>, which generates L<perltoc>, put path names in the +L<perltoc> 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<AUTHORS> 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<perlbug> +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<perl -V>, 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<Changes> file for an explanation of how to view exhaustive +details on what changed. + +The F<INSTALL> file for how to build Perl. + +The F<README> file for general stuff. + +The F<Artistic> and F<Copying> files for copyright information. + +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a57f041c0f..89ad8d73f9 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<perl5155delta>, 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<perl5156delta>, 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<feature>) or C<use v5.15>, 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<t> command - -The B<t> 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<tied> +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</Performance Enhancements> section. -The value returned by C<tied> 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<Scalar::Util::weaken(tied -$tied_variable)>. +[ List each enhancement as a =head2 entry ] =head1 Security -=head2 C<is_utf8_char()> - -The XS-callable function C<is_utf8_char()>, 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<is_utf8_foo()> functions, as well as C<utf8_to_foo()>, 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<is_utf8_string()>, C<is_utf8_string_loc()>, and -C<is_utf8_string_loclen()>. - -=head2 C<use I<VERSION>> +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L</Selected Bug Fixes> section. -As of this release, version declarations like C<use v5.16> 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<use v5.12> and higher continue to enable strict, but explicit C<use -strict> and C<no strict> 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</Reporting Bugs> below. -There is a new ":default" feature bundle that represents the set of -features enabled before any version declaration or C<use feature> has -been seen. Version declarations below 5.10 now enable the ":default" -feature set. This does not actually change the behaviour of C<use -v5.8>, 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<use v5.16>. It is part of the default -feature set and can be turned on or off explicitly with C<use feature -'array_base'>. +=head1 Deprecations -=head2 C<UNIVERSAL::VERSION> - -The change to C<UNIVERSAL::VERSION> in 5.15.2 has been reverted. It -now returns a stringified version object once more. - -=head2 C<substr> lvalue revamp - -When C<substr> 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<substr> 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<substr> 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</Modules and Pragmata> section. -If the original string changes length after the call to C<substr> 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<substr> itself is called. This only makes a difference if the -return value of C<substr> is referenced and assigned to later. - -=item * - -The order in which "uninitialized" warnings occur for arguments to -C<substr> 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<substr>. +=over 4 =item * -C<substr> 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<eval> - -C<eval> returns C<undef> in scalar context or an empty list in list -context when there is a run-time error. When C<eval> 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<tell> and C<eof> 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<cpan/>, F<dist/>, F<ext/> and F<lib/> +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F<Porting/corelist-perldelta.pl>, 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<Changes> file that could be +cribbed. -The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a -C<len> 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<DESTROY> methods (to prevent autoloading), by simply not -calling such empty methods. This release takes this optimisation a -step further, by not calling any C<DESTROY> method that begins with a -C<return> 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<return;> 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<substr> 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<substr> modifies the original string -itself. +XXX =back -=head1 Modules and Pragmata - =head2 Updated Modules and Pragmata =over 4 =item * -L<Archive::Tar> 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<AutoLoader> has been upgraded from version 5.71 to version 5.72. - -=item * - -L<B::Debug> has been upgraded from version 1.16 to version 1.17. - -=item * - -L<B::Deparse> 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<sort(foo(bar))> - -It used to deparse as C<sort foo(bar)>, 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<method { $expr }> 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<do +{}> and C<do({})> - -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<return> and C<last> that do not follow the -looks-like-a-function rule are now deparsed correctly with parentheses -in the right place. - -Similarly, C<not>, which I<does> 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<open local *FH> - -C<open>, C<pipe> and other functions that autovivify handles used to -omit C<local *> from C<local *FH>. - -=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<require $this + $that> - -In Perl 5.14, C<require> followed by any binary operator started -deparsing as C<no>. +L<XXX> has been upgraded from version 0.69 to version 0.70. =back -=item * - -L<Carp> 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<die> [perl #96672]. - -=item * - -L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version -2.045. - -=item * - -L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version -2.045. - -=item * - -L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version -0.005. - -=item * - -L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9114. - -=item * - -L<Data::Dumper> 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<diagnostics> 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<Digest::SHA> 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<Exporter> has been upgraded from version 5.65 to version 5.66. - -It no longer tries to localise C<$_> unnecessarily. - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version -3.07. - -=item * - -L<IO::Compress::Base> has been upgraded from version 2.042 to version -2.046. +=head2 Removed Modules and Pragmata -Added zipdetails utility. +=over 4 =item * -L<Locale::Codes> 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<Module::CoreList> has been upgraded from version 2.58 to version -2.59. +=back -=item * +=head1 Documentation -L<Module::Loaded> has been upgraded from version 0.06 to version 0.08. +XXX Changes to files in F<pod/> go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L<perlfunc>. -=item * +=head2 New Documentation -L<Pod::LaTeX> has been upgraded from version 0.59 to version 0.60. +XXX Changes which create B<new> files in F<pod/> go here. -Added another LaTeX escape: --- => -{}-{}- +=head3 L<XXX> -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<POSIX> has been upgraded from version 1.26 to version 1.27. +XXX Changes which significantly change existing files in F<pod/> go here. +However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics> +section. -It no longer produces a "Constant subroutine TCSANOW redefined" warning -on Windows. +=head3 L<XXX> -This bug was introduced in Perl 5.15.3. +=over 4 =item * -L<Socket> has been upgraded from version 1.94_02 to version 1.97. - -=item * +XXX Description of the change here -L<threads> has been upgraded from version 1.85 to version 1.86. +=back -=item * +=head1 Diagnostics -L<Unicode::Collate> 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<perldiag>. -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<C> code go here. Also +include any changes in L<perldiag> that reconcile it to the C<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<UNIVERSAL> has been upgraded from version 1.10 to version 1.11. + L<Invalid version object|perldiag/"Invalid version object"> +] -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<use locale> 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<perlfunc/lc> for more details, including the deficiencies of -this scheme. +XXX L<message|perldiag/"message"> =back -=head1 Documentation - -=head2 Changes to Existing Documentation - -=head3 L<perlsec/Laundering and Detecting Tainted Data> +=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<Scalar::Util/tainted>. +XXX L<message|perldiag/"message"> =back -=head1 Diagnostics - =head2 Changes to Existing Diagnostics -=over 4 - -=item * - -Redefinition warnings for constant subroutines used to be mandatory, -even occurring under C<no warnings>. Now they respect the L<warnings> -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<perldiag>. - -=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<default> and C<when> outside of a -topicalizer have been standardised to match the messages for -C<continue> 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<zipdetails> +XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go +here. Most of these are built within the directories F<utils> and F<x2p>. -=over 4 +[ List utility changes as a =head3 entry for each utility and =item +entries for each change +Use L<XXX> with program names to get proper documentation linking. ] -=item * - -L<zipdetails> 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<XXX> =over 4 =item * -F<pod/roffitall> is now built by F<pod/buildtoc>, 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<unicore/Name.pm>. This has been corrected [perl #104226]. - -=item * - -The man page for C<XS::Typemap> is no longer installed. C<XS::Typemap> -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<perlxs>, L<perlxstut> and L<perldoc> -are once again correctly installed in F<man1>, not F<man3> - -=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<Configure>, F<installperl>, F<installman>, 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</Platform Support> section, instead. -=head1 Testing +[ List changes as a =item entry ]. =over 4 =item * -The F<substr.t> and F<substr_thr.t> scripts for testing C<substr> have -been moved under F<t/op/>, where they were originally. They had been -moved under F<t/re/> 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<new> files in F<t/> go here as do any +large changes to the testing harness (e.g. when parallel testing was added). +Changes to existing files in F<t/> 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<symlink> 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<stat> 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|(?<capture>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<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when -such a sub was provided as the comparison routine. It used to croak on -C<sub {()}>. - -=item * - -Subroutines from the C<autouse> 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<autouse> 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<autouse> logic was reversed in -5.10-14. Only subroutines from the C<autouse> 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<newCONSTSUB> 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<newCONSTSUB> 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<perldiag>). 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<printf "%vd", "version"> no longer -crash [perl #102586]. - -=item * - -C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH -just once when $tied holds a reference. - -=item * - -Four-argument C<select> now always calls FETCH on tied arguments. It -used to skip the call if the tied argument happened to hold C<undef> or -a typeglob. - -=item * - -Four-argument C<select> no longer produces its "Non-string passed as -bitmask" warning on tied or tainted variables that are strings. - -=item * - -C<sysread> 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<evalbytes> keyword added in 5.15.5 was respecting C<use utf8> -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<hints/> +directories, or new subdirectories and F<README> files at the top level of the +source tree. -=item * +=over 4 -C<goto &func> 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<UNIVERSAL::AUTOLOAD> 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<is_utf8_string()>, C<is_utf8_string_loc()>, and -C<is_utf8_string_loclen()> could read beyond the end of the input -string by up to 12 bytes. This no longer happens. [perl #32080]. -However, currently, C<is_utf8_char()> still has this defect, see -L</is_utf8_char()> 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</Modules and Pragmata> 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<caller()> 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<eval>, such as -C<eval q|""!=!~//|> +XXX Changes which affect the interface available to C<XS> 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<ext/> and F<lib/> are best summarised in +L</Modules and Pragmata>. -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<local $_> when dumping data -structures. +=over 4 =item * -Calling C<readline($fh)> 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<PL_last_in_gv>) 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 C<TODO>ed for the release would be noted here, unless +they were specific to a particular platform (see below). -This is now fixed, but C<tell *{ *$fh }> 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<use -v5.43>, no longer cause locale settings to change [perl #105784]. +=over 4 =item * -F<pod/buildtoc>, which generates L<perltoc>, put path names in the -L<perltoc> 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<AUTHORS> 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<perlbug> -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<perl -V>, 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<perl -V>, 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<Changes> file for an explanation of how to view exhaustive -details on what changed. +The F<Changes> file for an explanation of how to view exhaustive details +on what changed. The F<INSTALL> file for how to build Perl. diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 9a3c83143a..c90bc45a10 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 1aeeb6c6d9..84986c9fd6 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 98afa95b7c..52d91ccf4d 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 94c1631d04..12da085732 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 \ |