This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Add ticket number to bug fix
[perl5.git] / pod / perldelta.pod
index d9e72df..b02a575 100644 (file)
@@ -1,26 +1,23 @@
 =encoding utf8
 
 =for comment
-This has been completed up to 6728c8514a, except for
-b0f2e9e nwclark     Fix two bugs related to pod files outside of pod/ (important enough?)
-43d9ecf jpeacock    Set all version object math ops to noop
-f300909 smueller    EU::ParseXS: Silence warning (probably unnecessary)
+This has been completed up to 1a50d74bac4, except for:
+8629c11317 smueller Escape double-quotes in generated #line directives
+8dc67a69b  shlomif  perl -d: display lines inside subroutines.
+3dfd1b5cd2 leont    Export PerlIOBase_open
 
 =head1 NAME
 
-[ this is a template for a new perldelta file. Any text flagged as
-XXX needs to be processed before release. ]
-
-perldelta - what is new for perl v5.15.6
+perldelta - what is new for perl v5.15.7
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.5 release and
-the 5.15.6 release.
+This document describes differences between the 5.15.6 release and
+the 5.15.7 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.
+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.
 
 =head1 Notice
 
@@ -28,36 +25,31 @@ XXX Any important notices here
 
 =head1 Core Enhancements
 
-XXX New core language features go here. Summarise user-visible core language
-enhancements. Particularly prominent performance optimisations could go
-here, but most should go in the L</Performance Enhancements> section.
-
-[ List each enhancement as a =head2 entry ]
-
-=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
-numerical 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)>.
-
-=head2 Lvalue C<scalar>
-
-C<scalar> can now be used as an lvalue.  You might consider this a new
-feature (which is why it is listed in this section), but the author of
-the change considered it a bug fix, since C<scalar> is only supposed to be
-setting scalar context, not changing lvalueness [perl #24346].
+=head2 C<use charnames> no longer needed for C<\N{I<name>}>
+
+The C<charnames> module is now automatically loaded when needed as if
+the C<:full> and C<:short> options had been specified.  See
+L<charnames>.
+
+=head2 Improved performance for Unicode properties in regular expressions
+
+Matching a code point against a Unicode property is now done via a
+binary search instead of linear.  This means for example that the worst
+case for a 1000 item property is 10 probes instead of 1000.  This
+inefficiency has been compensated for in the past by permanently storing
+in a hash the results of a given probe plus the results for the adjacent
+64 code points, under the theory that near-by code points are likely to
+be searched for.  A separate hash was used for each mention of a Unicode
+property in each regular expression.  Thus, C<qr/\p{foo}abc\p{foo}/>
+would generate two hashes.  Any probes in one instance would be unknown
+to the other, and the hashes could expand separately to be quite large
+if the regular expression were used on many different widely-separated
+code points.  This can lead to running out of memory in extreme cases.
+Now, however, there is just one hash shared by all instances of a given
+property.  This means that if C<\p{foo}> is matched against "A" in one
+regular expression in a thread, the result will be known immediately to
+all regular expressions, and the relentless march of using up memory is
+slowed considerably.
 
 =head1 Security
 
@@ -65,198 +57,45 @@ 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.
 
-=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 for it 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()>.
+[ List each security issue as a =head2 entry ]
 
 =head1 Incompatible Changes
 
 XXX For a release on a stable branch, this section aspires to be:
 
     There are no changes intentionally incompatible with 5.XXX.XXX
-    If any exist, they are bugs and reports are welcome.
+    If any exist, they are bugs, and we request that you submit a
+    report.  See L</Reporting Bugs> below.
 
 [ List each incompatible change as a =head2 entry ]
 
-=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.
+=head1 Deprecations
 
-These changes result in several incompatible changes and bug fixes:
+=head2 Deprecated Modules
 
 =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 ot 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 L<Version::Requirements>
 
-=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, but just once.
+Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements,
+which is a drop-in replacement. It will be deleted from perl.git blead
+in v5.17.0.
 
 =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.  For syntax errors (when C<eval> is passed
-a string), in list context 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 XS API tweak
-
-The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a
-C<len> parameter.
-
-=head1 Deprecations
-
-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.
-
-[ List each deprecation as a =head2 entry ]
-
 =head1 Performance Enhancements
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
-
-[ List each enhancement as a =item entry ]
-
 =over 4
 
 =item *
 
-Perl 5.12.0 sped up the destruction of objects whose classes define empty
-C<DESTROY> methods (to prevent autoloading), simply by not calling such
-empty methods.  This release takes this optimisation a step further, by not
-calling any C<DESTROY> method that begins with an 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 *
-
-Assign 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.
+Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now
+faster, as they enable features without loading F<feature.pm>.
 
 =item *
 
-Assignment to a substring 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.
+C<local $_> is faster now, as it no longer iterates through magic that it
+is not going to copy anyway.
 
 =back
 
@@ -272,732 +111,769 @@ cribbed.
 
 [ Within each section, list entries as a =item entry ]
 
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item *
-
-XXX
-
-=back
-
 =head2 Updated Modules and Pragmata
 
 =over 4
 
 =item *
 
-L<Archive::Tar> has been upgraded from version 1.80 to version 1.82.
+L<B::Deparse> has been upgraded from version 1.10 to version 1.11.
 
-Adjustments to handle files >8gb (>0777777777777 octal) and a feature to
-return the MD5SUM of files in the archive.
+It now deparses C<open('random string')> correctly.  It used to omit the
+quotation marks, which did not work if the string were not a valid
+identifier [perl #91416].
 
-=item *
+A similar bug also affected hash and array elements such as
+C<< 'random string'->[0] >>, which would deparse as C<$random string[0]>.
+This has been fixed.
 
-L<AutoLoader> has been upgraded from version 5.71 to version 5.72.
+Those same syntaxes used to drop the package name from variables beginning
+with a punctuation mark, as in C<< "foo::]"->{$key} >>.  This, too, has
+been fixed.
 
-=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.
+B::Deparse no longer hangs when deparsing a program with stash
+circularities, such as C<BEGIN { *Acme::Acme:: = *Acme:: }> [perl #91384].
 
-Various constructs that used to be deparsed incorrectly have been fixed:
+C</$s[1]/> used to be deparsed as C<$s[1]> if @s were a lexical variable
+[perl #81424].  Similarly, C</$#s/> would be deparsed as C<$#s> for both
+lexical and package variables.  These has been fixed.
 
-=over
+The C</applaud> regular expression flags are no longer omitted.
 
-=item C<sort(foo(bar))>
+Feature hints are now deparsed with C<use feature> rather than C<%^H>
+assignments.
 
-C<sort foo(bar)>, how it used to deparse, makes foo the sort routine,
-rather than a regular function call.
+A regression in 1.10 that caused C<ambient_pragmas> to disable strict mode
+in obscure cases has been fixed.
 
-=item Keys and values in C<%^H>
+Strict mode is now fully deparsed, including subs and vars [perl #24027].
 
-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.
+The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces
+(i.e., C<${(}>) in regular expressions [perl #86060].
 
-Special characters, such as quotation marks, were not being escaped
-properly.
+C<continue> blocks after C<for> loops are now deparsed correctly, as they
+were back in 0.67 (included with Perl 5.8.5) [perl #108224]
 
-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
+=item *
 
-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.
+L<CGI> has been upgraded from version 3.58 to version 3.59.
 
-=item C<do +{}> and C<do({})>
+We no longer read from STDIN when the Content-Length is not set, preventing
+requests with no Content-Length from freezing in some cases. This is consistent
+with the CGI RFC 3875, and is also consistent with CGI::Simple. However, the old
+behavior may have been expected by some command-line uses of CGI.pm.
 
-These are both variants of do-file syntax, but were being deparsed as
-do-blocks.
+=item *
 
-=item Keywords that do not follow the llafr
+L<CPAN::Meta> has been upgraded from version 2.112621 to version 2.113640.
 
-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.
+Version::Requirements has now been merged as CPAN::Meta::Requirements.
 
-Similarly, C<not>, which I<does> follow the llafr, was being deparsed as
-though it does not.
+=item *
 
-=item C<=~>
+L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9116.
 
-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 *
 
-=item C<open local *FH>
+L<Data::Dumper> has been upgraded from version 2.135_01 to version
+2.135_03.
 
-C<open>, C<pipe> and other functions that autovivify handles used to omit
-C<local *> from C<local *FH>.
+It can now dump vstrings [perl #101162].
 
-=item Negated single-letter subroutine calls
+The nameless typeglob (C<*{""}>) is now dumped properly.
 
-Negated subroutine calls like C<- f()> and C<-(f())> were being deparsed
-as file test operators.
+=item *
 
-=item C<&{&}>
+L<diagnostics> has been upgraded from version 1.26 to version 1.27.
 
-C<&{&}> and C<& &>, which are calls to the subroutine named "&", believe it
-or not, were being deparsed as C<&&>.
-
-=back
+See the entry for splain in the L</Utility Changes> section, for the
+changes.  The diagnostics module and the splain utility are actually one
+and the same.
 
 =item *
 
-L<Carp> has been upgraded from version 1.23 to version 1.24.
+L<ExtUtils::Packlist> has been upgraded from version 1.45 to version 1.46.
 
-It now tacks the last-accessed filehandle and line number on to the end of
-the error message, just like C<die> [perl #96672].
+It no longer produces "used once" warnings when the C<read> and C<write>
+methods are called while the main program is still compiling (e.g., from
+within a BEGIN block) [perl #107410] [rt.cpan.org #50315].
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version 2.045.
+L<Locale::Maketext> has been upgraded from version 1.21 to version 1.22.
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version 2.045.
+L<Module::Pluggable> has been upgraded from version 3.9 to version 4.0.
 
 =item *
 
-L<CPAN::Meta::YAML> has been upgraded from version 0.004 to version 0.005.
+L<overload> has been upgraded from version 1.16 to version 1.17.
 
-=item *
+C<overload::Overloaded> no longer calls C<can> on the class, but uses
+another means to determine whether the object has overloading.  It was
+never correct for it to call C<can>, as overloading does not respect
+AUTOLOAD.  So classes that autoload methods and implement C<can> no longer
+have to account for overloading [perl #40333].
 
-L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9113.
+A warning is now produced for invalid arguments.  See L</New Diagnostics>.
 
 =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.
+L<perlfaq> has been upgraded from version 5.0150036 to version 5.0150038.
 
 =item *
 
-L<Digest::SHA> has been upgraded from version 5.63 to version 5.70.
+L<PerlIO::scalar> has been upgraded from version 0.12 to version 0.13.
 
-Added BITS mode to addfile method and shasum which makes partial-byte inputs
-now possible via files/STDIN and allows shasum to check all 8074 NIST Msg vectors,
-where previously special programming was required to do this.
+(This is the module that implements C<< open $fh, '>', \$scalar >>.)
 
-=item *
+It no longer assumes during C<seek> that $scalar is a string internally.
+If it didn't crash, it was close to doing so [perl #92706].
 
-L<Exporter> has been upgraded from version 5.65 to version 5.66.
+Printing to an in-memory handle now works if the $scalar holds a reference,
+stringifying the reference before modifying it.  References used to be
+treated as empty strings.
 
-It no longer tries to localise C<$_> unnecessarily.
+Printing to an in-memory handle no longer crashes if the $scalar happens to
+hold a number internally, but no string buffer.
 
 =item *
 
-L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version 3.07.
+L<Pod::Html> has been upgraded from version 1.12 to 1.13
 
 =item *
 
-L<IO::Compress::Base> has been upgraded from version 2.042 to version 2.045.
+L<POSIX> has been upgraded from version 1.27 to version 1.29.
 
-Added zipdetails utility.
+C<sigsuspend> and C<pause> now run signals handle before returning, as the
+whole point of these two functions is to wait until a signal has
+arrived, and then return I<after> it has been triggered.  Delayed, or
+"safe", signals were preventing that from happening, possibly resulting in
+race conditions [perl #107216].
+C<POSIX::sleep> is now a direct call into the underlying OS C<sleep>
+function, instead of being a Perl wrapper on C<CORE::sleep>. C<POSIX::dup2>
+now returns the correct value on Win32 (I<i.e.> the file descriptor).
+C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and C<POSIX::pause> now
+dispatch safe signals immediately before returning to their caller.
 
 =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 sometime 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::*) but that is gone now.
-Added Language Family codes (langfam) as defined in ISO 639-5.
+L<Pod::Perldoc> has been upgraded from version 3.15_01 to version 3.15_15.
 
 =item *
 
-L<Module::Loaded> has been uprgaded from version 0.06 to version 0.08.
+L<Term::UI> has been upgraded from version 0.26 to version 0.30.
 
 =item *
 
-L<Pod::LaTeX> has been upgraded from version 0.59 to version 0.60.
+L<Tie::File> has been upgraded from version 0.96 to version 0.98.
 
-Added another LaTeX escape: --- => -{}-{}-
+=item *
 
-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 -{}-{}-{}-{}-
+L<Unicode::UCD> has been upgraded from version 0.37 to version 0.38.
+This changes the output of C<prop_invmap()> for the Name_Alias property
+to reflect the changes that are planned for Unicode 6.1, so that there
+won't be a format change when upgrading to 6.1.  Briefly, a second
+component of each alias is added that gives the type of alias it is.
+Examples are at L<Unicode::UCD/prop_invmap()>.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.26 to version 1.27.
+L<Version::Requirements> has been upgraded from version 0.101020 to version 0.101021.
 
-It no longer produces a "Constant subroutine TCSANOW redefined" warning on
-Windows.
+Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements,
+which is a drop-in replacement.
 
-XXX When did it start producing that warning?  Was it post-5.15.5?  Even if
-it was not, adding a note will help whoever compiles perl5160delta.
+=back
 
-=item *
+=head1 Documentation
 
-L<Socket> has been upgraded from version 1.94_02 to version 1.97.
+=head2 Changes to Existing Documentation
 
-=item *
+=head3 L<perlfunc>
 
-L<threads> has been upgraded from version 1.85 to version 1.86.
+=over 4
 
 =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.
-
-Now Locale/*.pl files are searched in @INC.
+C<dbmopen> treats a 0 mode as a special case, that prevents a nonexistent
+file from being created.  This has been the case since Perl 5.000, but was
+never documented anywhere.  Now the perlfunc entry mentions it
+[perl #90064].
 
 =item *
 
-L<UNIVERSAL> has been upgraded from version 1.10 to version 1.11.
-
-Documentation change clarifies return values from UNIVERSAL::VERSION.
+The entry for C<split> has been rewritten.  It is now far clearer than
+before.
 
 =back
 
-=head2 Removed Modules and Pragmata
+=head3 L<perlop> and L<perlsyn>
 
 =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.
+Documentation of the smartmatch operator has been reworked and moved from
+perlsyn to perlop where it belongs.
 
-=back
+=item *
 
-=head1 Documentation
+Documentation of the ellipsis statement (C<...>) has been reworked and
+moved from perlop to perlsyn.
 
-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>.
+=back
 
-=head2 New Documentation
+=head1 Diagnostics
 
-XXX Changes which create B<new> files in F<pod/> go here.
+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>.
 
-=head3 L<XXX>
+=head2 New Diagnostics
 
-XXX Description of the purpose of the new file here
+=head3 New Errors
 
-=head2 Changes to Existing Documentation
+=over 4
 
-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.
+=item *
 
-=head3 L<perlsec/Laundering and Detecting Tainted Data>
+L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args">
 
-=over 4
+This error occurs when C<caller> tries to set C<@DB::args> but finds it
+tied.  Before this error was added, it used to crash instead.
 
 =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, though, remains to use L<Scalar::Util/tainted>.
-
-=back
+L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array">
 
-=head1 Diagnostics
+This error is part of a safety check that the C<tie> operator does before
+tying a special array like C<@_>.  You should never see this message.
 
-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>.
+=back
 
-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.
+=head3 New Warnings
 
-[ Within each section, list entries as a =item entry that links to perldiag,
-  e.g.
+=over 4
 
-  =item *
+=item *
 
-  L<Invalid version object|perldiag/"Invalid version object">
-]
+L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated">
 
-=head2 New Diagnostics
+The long-deprecated C<defined(@array)> now also warns for package variables.
+Previously it only issued a warning for lexical variables.
 
-XXX Newly added diagnostic messages go here
+=item *
 
-=head3 New Errors
+L<Useless use of \E|perldiag/"Useless use of \E">
 
-=over 4
+C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>.
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid">
+
+This warning, in the "overload" category, is produced when the overload
+pragma is given an argument it doesn't recognize, presumably a mistyped
+operator.
 
 =back
 
-=head3 New Warnings
+=head2 Removals
 
 =over 4
 
 =item *
 
-XXX L<message|perldiag/"message">
+"sort is now a reserved word"
+
+This error used to occur when C<sort> was called without arguments, followed by C<;> or C<)>.  (E.g., C<sort;> would die, but C<{sort}> was
+OK.)  This error message was added in Perl 3 to catch code like
+C<close(sort)> which would no longer work.  More than two decades later,
+this message is no longer appropriate.  Now C<sort> without arguments is
+always allowed, and returns an empty list, as it did in those cases where
+it was already allowed [perl #90030].
 
 =back
 
-=head2 Changes to Existing Diagnostics
+=head1 Utility Changes
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
+=head3 L<splain>
 
 =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.
+splain no longer emits backtraces with the first line number repeated.
+This:
 
-=item *
+    Uncaught exception from user code:
+            Cannot fwiddle the fwuddle at -e line 1.
+     at -e line 1
+            main::baz() called at -e line 1
+            main::bar() called at -e line 1
+            main::foo() called at -e line 1
 
-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>.
+has become this:
 
-=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.
+    Uncaught exception from user code:
+            Cannot fwiddle the fwuddle at -e line 1.
+            main::baz() called at -e line 1
+            main::bar() called at -e line 1
+            main::foo() called at -e line 1
 
 =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].
+Some error messages consist of multiple lines that are listed as separate
+entries in L<perldiag>.  splain has been taught to find the separate
+entries in these cases, instead of simply failing to find the message.
 
 =back
 
-=head1 Utility Changes
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+The Pod files for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc>
+are once again correctly installed in the same directory as the other core
+Pods.
 
-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>.
+=for 5.16.0 This isn't a regression from 5.14.x, so don't mention this.
 
-[ 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. ]
+=back
 
-=head3 L<zipdetails>
+=head1 Testing
 
 =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.
+F<t/porting/utils.t> now tests that various utility scripts compile cleanly.
+During development, this avoids the embarrassment of inadvertently pushing a
+commit which breaks code which isn't otherwise tested by the regression test
+suite. For example, F<installperl> and F<installman>, needed by
+C<make install>, are tested here.
 
 =back
 
-=head1 Configuration and Compilation
-
-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.
-
-[ List changes as a =item entry ].
+=head1 Internal Changes
 
 =over 4
 
 =item *
 
-F<pod/roffitall> is now build 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.
+There are now feature bundle hints in C<PL_hints> (C<$^H>) that version
+declarations use, to avoid having to load F<feature.pm>.  One setting of
+the hint bits indicates a "custom" feature bundle, which means that the
+entries in C<%^H> still apply.  F<feature.pm> uses that.
 
-=item *
+The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other
+hints.  Other macros for setting and testing features and bundles are in
+the new F<feature.h>.  C<FEATURE_IS_ENABLED> (which has moved to
+F<feature.h>) is no longer used throughout the codebase, but more specific
+macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>.
 
-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 *
 
-XXX Is that Perl version correct?  Is the file path correct?
+F<lib/feature.pm> is now a generated file, created by the new
+F<regen/feature.pl> script, which also generates F<feature.h>.
 
 =item *
 
-The -Dusesitecustomize and -Duserelocatableinc options now work together
-properly.
+Tied arrays are now always C<AvREAL>.  If C<@_> or C<DB::args> is tied, it
+is reified first, to make sure this is always the case.
 
 =back
 
-=head1 Testing
-
-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.
-
-[ List each test improvement as a =item entry ]
+=head1 Selected Bug Fixes
 
 =over 4
 
-=item *
+=item * "b . COND" in the debugger has been fixed
 
-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.
+Breaking on the current line with C<b . COND> was broken by previous work and
+has now been fixed.
 
-=back
+=item * Tying C<%^H>
 
-=head1 Platform Support
+Tying C<%^H> no longer causes perl to crash or ignore
+the contents of C<%^H> when entering a compilation
+scope [perl #106282].
 
-XXX Any changes to platform support should be listed in the sections below.
+=item * C<~> on vstrings
 
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
+The bitwise complement operator (and possibly other operators, too) when
+passed a vstring would leave vstring magic attached to the return value,
+even though the string had changed.  This meant that
+C<< version->new(~v1.2.3) >> would create a version looking like "v1.2.3"
+even though the string passed to C<< version->new >> was actually
+"\376\375\374".  This also caused L<B::Deparse> to deparse C<~v1.2.3>
+incorrectly, without the C<~> [perl #29070].
 
-=head2 New Platforms
+=item * Vstrings blowing away magic
 
-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.
+Assigning a vstring to a magic (e.g., tied, C<$!>) variable and then
+assigning something else used to blow away all the magic.  This meant that
+tied variables would come undone, C<$!> would stop getting updated on
+failed system calls, C<$|> would stop setting autoflush, and other
+mischief would take place.  This has been fixed.
 
-=over 4
+=item * C<newHVhv> and tied hashes
 
-=item XXX-some-platform
+The C<newHVhv> XS function now works on tied hashes, instead of crashing or
+returning an empty hash.
 
-XXX
+=item * Hashes will null elements
 
-=back
+It is possible from XS code to create hashes with elements that have no
+values.  Perl itself sometimes creates such hashes, but they are rarely
+visible to Perl code.  The hash element and slice operators used to crash
+when handling these in lvalue context.  These have been fixed.  They now
+produce a "Modification of non-creatable hash value attempted" error
+message.
 
-=head2 Discontinued Platforms
+=item * No warning for C<open(foo::bar)>
 
-XXX List any platforms that this version of perl no longer compiles on.
+When one writes C<open foo || die>, which used to work in Perl 4, a
+"Precedence problem" warning is produced.  This warning used erroneously to
+apply to fully-qualified bareword handle names not followed by C<||>.  This
+has been corrected.
 
-=over 4
+=item * C<select> and package aliasing
 
-=item XXX-some-platform
+After package aliasing (C<*foo:: = *bar::>), C<select> with 0 or 1 argument
+would sometimes return a name that could not be used to refer to the
+filehandle, or sometimes it would return C<undef> even when a filehandle
+was selected.  Now it returns a typeglob reference in such cases.
 
-XXX
+=item * C<PerlIO::get_layers> and tied variables
 
-=back
+C<PerlIO::get_layers> no longer ignores FETCH on tied variables as it used
+to most of the time [perl #97956].
 
-=head2 Platform-Specific Notes
+=item * C<PerlIO::get_layers> and numbers
 
-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.
+C<PerlIO::get_layers> no longer ignores some arguments that it thinks are
+numeric, while treating others as filehandle names.  It is now consistent
+for flat scalars (i.e., not references).
 
-=head3 VMS
+=item * Lvalue subs and strict mode
 
-=over 4
+Lvalue sub calls that are not determined to be such at compile time
+(C<&$name> or &{"name"}) are no longer exempt from strict refs if they
+occur in the last statement of an lvalue subroutine [perl #102486].
 
-=item *
+=item * Non-lvalue sub calls in potentially lvalue context
 
-A link-time error on VMS versions without C<symlink> support was
-introduced in 5.15.1, but has now been corrected.
+Sub calls whose subs are not visible at compile time, if
+they occurred in the last statement of an lvalue subroutine,
+would reject non-lvalue subroutines and die with "Can't modify non-lvalue
+subroutine call" [perl #102486].
 
-=item *
+Non-lvalue sub calls whose subs I<are> visible at compile time exhibited
+the opposite bug.  If the call occurred in the last statement of an lvalue
+subroutine, there would be no error when the lvalue sub was called in
+lvalue context.  Perl would blindly assign to the temporary value returned
+by the non-lvalue subroutine.
 
-Explicit support for VMS versions prior to v7.0 and DEC C versions prior
-to v6.0 has been removed.
+=item * AUTOLOADing lvalue subs
 
-=item *
+C<AUTOLOAD> routines used to take precedence over the actual sub being
+called (i.e., when autoloading wasn't needed), for sub calls in lvalue or
+potential lvalue context, if the subroutine was not visible at compile
+time.
 
-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.
+=item * C<caller> and tied C<@DB::args>
 
-=back
+C<caller> sets C<@DB::args> to the subroutine arguments when called from
+the DB package.  It used to crash when doing so if C<@DB::args> happened to
+be tied.  Now it croaks instead.
 
-=head1 Internal Changes
+=item * Tying C<@_>
 
-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.
+Under debugging builds, this code:
 
-[ List each change as a =item entry ]
+  sub TIEARRAY{bless[]}
+  sub {
+    tie @_, "";
+    \@_;
+  }->(1);
 
-=over 4
+use to produce an "av_reify called on tied array" warning.  It doesn't any
+more.
 
-=item *
+=item * Unrecognised switches on C<#!> line
 
-XXX
+If a switch, such as B<-x>, that cannot occur on the C<#!> line is used
+there, perl dies with "Can't emulate...".
 
-=back
+It used to produce the same message for switches that perl did not
+recognise at all, whether on the command line or the C<#!> line.
 
-=head1 Selected Bug Fixes
+Now it produces the "Unrecognized switch" error message [perl #104288].
 
-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>.
+=item * C<system> and SIGCHLD
 
-[ List each fix as a =item entry ]
+C<system> now temporarily blocks the SIGCHLD signal handler, to prevent the
+signal handler from stealing the exit status [perl #105700].
 
-=over 4
+=item * Deleting methods via C<delete>
 
-=item *
+Deletion of methods via C<delete $Class::{method}> syntax used to update
+method caches if called in void context, but not scalar or list context.
+Now it always updates those caches.
 
-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:
+=item * Hash element deletion and destructors
 
-    for (1..10_000_000) {
-       if ("foo" =~ /(foo|(?<capture>bar))?/) {
-           my $capture = $+{capture}
-       }
-    }
-    system "ps -o rss $$"'
+When hash elements are deleted in void context, the internal hash entry is
+now freed before the value is freed, to prevent destructors called by that
+latter freeing from seeing the hash in an inconsistent state.  It was
+possible to cause double-frees if the destructor freed the hash itself
+[perl #100340].
 
-=item *
+=item * C<(s)printf>'s %n formatting code
 
-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.
+The %n formatting code, which causes the number of characters to be
+assigned to the next argument to C<printf> or C<sprintf> now actually
+assigns the number of characters, instead of the number of bytes.
 
-=item *
+It also works now with special lvalue functions like C<substr> and with
+nonexistent hash and array elements [perl #103492].
 
-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 * Typeglobs and threads
 
-=item *
+Typeglobs returned from threads are no longer cloned if the parent thread
+already has a glob with the same name.  This means that returned
+subroutines will now assign to the right package variables [perl #107366].
 
-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 * C<local $_>
 
-=item *
+In Perl 5.14, C<local $_> was changed to create a new variable not tied to
+anything, even if $_ was tied before that.  But, due to an oversight, it
+would still call FETCH once on a tied $_ before replacing it with the new
+variable.  This has been fixed [perl #105912].
 
-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 * Returning tied variables
 
-=item *
+When returning a value from a non-lvalue subroutine, Perl copies the value.
+Sometimes it cheats for the sake of speed, and does not copy the value if
+it makes no observable difference.  This optimisation was erroneously
+allowing the copy to be skipped on tied variables, causing a difference in
+behaviour depending on the tied variable's reference count.  This has been
+fixed [perl #95548].
 
-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<{@a = sort}> no longer crashes
 
-=item *
+This particular piece of code (C<sort> with no arguments assigned to an
+array, inside a block with no C<;>) started crashing in an earlier 5.15.x
+release.  It has been fixed.
 
-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> redefine and existing subroutine:
+=item * C<utf8::decode> and read-only scalars
 
-    use warnings;
-    BEGIN {
-       no warnings;
-       some_XS_function_that_calls_new_CONSTSUB();
-    }
+C<utf8::decode> now refuses to modify read-only scalars [perl #91850].
 
-=item *
+=item * C<dbmopen> with undefined mode
 
-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.
+C<dbmopen> now only warns once, rather than three times, if the mode
+argument is C<undef> [perl #90064].
 
-=item *
+=item * Freeing an aggregate during list assignment
 
-The internal check to see whether a redefinition warning should occur used
-to emit "uninitialized" warnings in cases like this:
+If list assignment to a hash or array triggered destructors that freed the
+hash or array itself, a crash would ensue.  This is no longer the case
+[perl #107440].
 
-    use warnings "uninitialized";
-    use constant {u=>undef,v=>undef};
-    sub foo(){u} sub foo(){v}
+=item * Confused internal bookkeeping with @ISA arrays
 
-=item *
+Creating a weak reference to an @ISA array or accessing the array index
+(C<$#ISA>) could result in confused internal bookkeeping for elements
+subsequently added to the @ISA array.  For instance, creating a weak
+reference to the element itself could push that weak reference on to @ISA;
+and elements added after use of C<$#ISA> would be ignored by method lookup
+[perl #85670].
 
-A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
-warnings to report the wrong variable if the operator in question has
-two operands and one is C<%{...}> or C<@{...}>.  This has been fixed
-[perl #103766].
+=item * DELETE on scalar ties
 
-=item *
+Tying an element of %ENV or C<%^H> and then deleting that element would
+result in a call to the tie object's DELETE method, even though tying the
+element itself is supposed to be equivalent to tying a scalar (the element
+is, of course, a scalar) [perl #67490].
 
-C<< version->new("version") >> and C<printf "%vd", "version"> no longer
-crash [perl #102586].
+=item * Freeing $_ inside C<grep> or C<map>
 
-=item *
+Freeing $_ inside a C<grep> or C<map> block or a code block embedded in a
+regular expression used to result in double frees [perl #92254, #92256].
 
-C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH just
-once when $tied holds a reference.
+=item * Warnings with C<+=>
 
-=item *
+The C<+=> operator does not usually warn when the left-hand side is
+C<undef>, but it was doing so for tied variables.  This has been fixed
+[perl #44895].
 
-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 * Tying and autovivification
 
-=item *
+When Perl autovivifies an element of a tied array or hash (which entails
+calling STORE with a new reference), it now calls FETCH immediately after
+the STORE, instead of assuming that FETCH would have returned the same
+reference.  This can make it easier to implement tied objects [perl #35865, #43011].
 
-Four-argument C<select> no longer produces its "Non-string passed as
-bitmask" warning on tied or tainted variables that are strings.
+=item * C<@&> and C<$&>
 
-=item *
+Mentioning a variable named "&" other than C<$&> (i.e., C<@&> or C<%&>) no
+longer stops C<$&> from working.  The same applies to variables named "'"
+and "`" [perl #24237].
 
-C<sysread> now always calls FETCH on the buffer passed to it if it is tied.
-It used to skip the call if the tied variable happened to hold a typeglob.
+=item * Stacked filetests
 
-=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.
+C<-T> and C<-B> now work when stacked up with other filetest operators
+[perl #77388].
 
-=item *
+=item * Filetests and stat buffers
 
-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.
+Perl keeps several internal variables to keep track of the last stat
+buffer, from which file(handle) it originated, what type it was, and
+whether the last stat succeeded.
 
-=item *
+There were various cases where these could get out of synch, resulting in
+inconsistent or erratic behaviour in edge cases (every mention of C<-T>
+applies to C<-B> as well):
 
-C<goto &func> no longers 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].
+=over
 
 =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.
+C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last
+stat type, so an C<lstat _> following it would merrily return the wrong
+results.  Also, it was not setting the success status.
 
 =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.
+Freeing the handle last used by C<stat> or a filetest could result in
+S<C<-T _>> using an unrelated handle.
 
 =item *
 
-Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
-C<%!> from working some of the time [perl #105024].
+C<stat> with an IO reference (as returned by C<*STDIO{IO}>, for instance)
+would not reset the stat type.
 
 =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.
+C<stat> with an IO reference was not recording the filehandle for
+S<C<-T _>> to use.
 
 =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.
+The presence of fatal warnings could cause the stat buffer not to be reset
+for a filetest operator on an unopened filehandle or C<-l> on any handle.
 
 =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.
+Fatal warnings would stop C<-T> from setting C<$!>.
 
 =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].
+When the last stat was on an unreadable file, C<-T _> is supposed to
+return C<undef>, leaving the last stat buffer unchanged.  But it was
+setting the stat type, causing C<lstat _> to stop working.
 
 =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|""!=!~//|);>
+C<-T I<FILENAME>> was not resetting the internal stat buffers for
+unreadable files.
 
-=item *
+=back
 
-The "c [line num]" debugger command was broken by other debugger changes
-release in 5.15.3.  This is now fixed.
+These have all been fixed.
 
-=item *
+=item * C<defined *{"!"}>
 
-Breakpoints were not properly restored after a debugger restart using the
-"R" command.  This was broken in 5.15.3.  This is now fixed.
+An earlier 5.15.x release caused this construct to stop the C<%!> hash
+from working.  Likewise C<defined *{"+"}> and C<defined *{"-"}> caused
+C<%+> and C<%->, respectively, to stop working.  This has been fixed.
 
-=item *
+=item * C<-T _> with no preceding C<stat>
 
-The debugger prompt did not display the current line in.  This was broken
-in 5.15.3.  This is now fixed.
+This used to produce a confusing "uninitialized" warning, even though there
+is no visible uninitialized value to speak of.
 
-=item *
+=item * C<stat I<HANDLE>> and fstat failures
 
-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].
+If the operating system's C<fstat> function failed, C<stat> would warn
+about an unopened handle, even though that was not the case.  This has been
+fixed.
 
-=back
+=item * C<lstat I<IOREF>>
 
-=head1 Known Problems
+C<lstat> is documented to fall back to C<stat> (with a warning) when given
+a filehandle.  When passed an IO reference, it was actually doing the
+equivalent of S<C<stat _>> and ignoring the handle.
 
-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).
+=item * Crashes with warnings
 
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+Two warning messages that mention variable names started crashing in
+5.15.5, but have been fixed [perl #106726, #107656].
 
-[ List each fix as a =item entry ]
+=item * Bitwise assignment operators and copy-on-write
 
-=over 4
+In 5.14.0, the bitwise assignment operators C<|=>, C<^=> and C<&=> starting
+leaving the left-hand side undefined if it happened to be a copy-on-write
+string.  This has been fixed [perl #108480].
 
-=item *
+=item * Three problematic Unicode characters now work better in regex pattern matching under C</i>
+
+In the past, three Unicode characters:
+LATIN SMALL LETTER SHARP S,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+and
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+along with the sequences that they fold to
+(including "ss" in the case of LATIN SMALL LETTER SHARP S),
+did not properly match under C</i>.  5.14.0 fixed some of these cases,
+but introduced others, including a panic when one of the characters or
+sequences was used in the C<(?(DEFINE)> regular expression predicate.
+The known bugs that were introduced in 5.14 have now been fixed; as well
+as some other edge cases that have never worked until now.  All these
+involve using the characters and sequences outside bracketed character
+classes under C</i>.  This closes [perl #98546].
 
-XXX
+There remain known problems when using certain characters with
+multi-character folds inside bracketed character classes, including such
+constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>.  These
+remaining bugs are addressed in [perl #89774].
 
 =back
 
-=head1 Obituary
+=head1 Acknowledgements
+
+Perl 5.15.7 represents approximately 4 weeks of development since Perl 5.15.6
+and contains approximately 50,000 lines of changes across 470 files from 28
+authors.
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+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.7:
 
-=head1 Acknowledgements
+Alberto Simões, Brian Fraser, Chris 'BinGOs' Williams, Craig A. Berry, Dave
+Rolsky, David Mitchell, Eric Brine, Father Chrysostomos, Florian Ragwitz,
+H.Merijn Brand, Hojung Youn, James E Keenan, Joel Berger, Joshua ben Jore, Karl
+Williamson, Leon Timmermans, Matthew Horsfall, Michael Witten, Nicholas Clark,
+Ricardo Signes, Shlomi Fish, Steffen Müller, Steffen Schwigon, Todd Rinaldo,
+Tom Christiansen, Tom Hukins, Tony Cook, Æ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.
 
-XXX Generate this with:
+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.
 
-  perl Porting/acknowledgements.pl v5.15.5..HEAD
+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