This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for 5c0877fa4ac0 (VMS include files).
[perl5.git] / pod / perldelta.pod
index c7a0436..cf53f4c 100644 (file)
@@ -2,9 +2,6 @@
 
 =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.17.1
 
 =head1 DESCRIPTION
@@ -16,122 +13,209 @@ If you are upgrading from an earlier release such as 5.16.0, first read
 L<perl5170delta>, which describes differences between 5.16.0 and
 5.17.0.
 
-=head1 Notice
-
-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 More CORE:: subs
 
 Several more built-in functions have been added as subroutines to the
 CORE:: namespace, namely, those non-overridable keywords that can be
 implemented without custom parsers: C<defined>, C<delete>, C<exists>,
-C<glob>, C<pos>, C<protoytpe>, C<scalar>, C<split>, C<study>, C<undef>,
+C<glob>, C<pos>, C<protoytpe>, C<scalar>, C<split>, C<study>, and C<undef>.
 
 As some of these have prototypes, C<prototype('CORE::...')> has been
-changed not to make a distinction between overridable and non-overridable
+changed to not make a distinction between overridable and non-overridable
 keywords.  This is to make C<prototype('CORE::pos')> consistent with
 C<prototype(&CORE::pos)>.
 
-=head1 Security
-
-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.
-
-[ List each security issue as a =head2 entry ]
-
 =head1 Incompatible Changes
 
-XXX For a release on a stable branch, this section aspires to be:
+=head2 C</(?{})/> and C</(??{})/> have been heavily reworked
 
-    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.
+The implementation of this feature has been almost completely rewritten.
+Although its main intent is to fix bugs, some behaviors, especially
+related to the scope of lexical variables, will have changed.  This is
+described more fully in the L</Selected Bug Fixes> section.
 
 =head2 C<\N{BELL}> now refers to U+1F514 instead of U+0007
 
 Unicode 6.0 reused the name "BELL" for a different code point than it
 traditionally had meant.  Since Perl v5.14, use of this name still
-referred to U+0007, but would raise a deprecated warning.  Now, "BELL"
+referred to U+0007, but would raise a deprecation warning.  Now, "BELL"
 refers to U+1F514, and the name for U+0007 is "ALERT".  All the
 functions in L<charnames> have been correspondingly updated.
 
-=head1 Deprecations
+=head2 Alphanumeric operators must now be separated from the closing
+delimiter of regular expressions
 
-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.
+You may no longer write something like:
 
-[ List each deprecation as a =head2 entry ]
+ m/a/and 1
 
-=head1 Performance Enhancements
+Instead you must write
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+ m/a/ and 1
 
-[ List each enhancement as a =item entry ]
+with whitespace separating the operator from the closing delimiter of
+the regular expression.  Not having whitespace has resulted in a
+deprecation warning since Perl v5.14.0.
+
+=head2 C<require> dies for unreadable files
+
+When C<require> encounters an unreadable file, it now dies.  It used to
+ignore the file and continue searching the directories in @INC
+[perl #113422].
+
+=head2 Upgrade to the Unicode 6.2 beta
+
+Unicode 6.2 is proposing some changes that may very well break some CPAN
+modules.  The timing of this nicely coincides with Perl's being early in the
+release cycle.  This commit takes the current beta 6.2, adds the proposed
+changes that aren't yet in it, and subtracts the changes that would affect \X
+processing, as those turn out to have errors, and may have to be rethought.
+Unicode has been notified of these problems.
+
+This will allow us to gather data as to whether or not the proposed changes
+cause us problems.  These will be presented to Unicode to aid in their final
+decision as to whether or not to go forward with the changes.
+
+These changes will be replaced by the final version of Unicode 6.2 before
+5.18.0 is released.
+
+=head1 Performance Enhancements
 
 =over 4
 
 =item *
 
-XXX
+The C<x> repetition operator is now folded to a single constant at compile
+time if called in scalar context with constant operands and no parentheses
+around the left operand.
 
 =back
 
 =head1 Modules and Pragmata
 
-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.
+=head2 Updated Modules and Pragmata
 
-[ Within each section, list entries as a =item entry ]
+=over 4
 
-=head2 New Modules and Pragmata
+=item *
 
-=over 4
+L<Archive::Extract> has been upgraded from version 0.58 to 0.60.
+
+Work around an edge case on Linux with Busybox's unzip.
 
 =item *
 
-XXX
+L<Archive::Tar> has been upgraded from version 1.82 to 1.88.
 
-=back
+ptar now supports the -T option as well as dashless options
+[rt.cpan.org #75473], [rt.cpan.org #75475].
 
-=head2 Updated Modules and Pragmata
+Auto-encode filenames marked as UTF-8 [rt.cpan.org #75474].
 
-=over 4
+Don't use C<tell> on L<IO::Zlib> handles [rt.cpan.org #64339].
+
+Don't try to C<chown> on symlinks.
 
 =item *
 
-L<ExtUtils::CBuilder> has been upgraded from version 0.280206 to 0.280208.
+L<attributes> has been upgraded from version 0.19 to 0.20.
 
-Manifest files are now correctly embedded for those versions of VC++ which
-make use of them.
+=item *
+
+L<autodie> has been upgraded from version 2.10 to 2.11.
+
+=item *
+
+L<B> has been upgraded from version 1.35 to 1.36.
+
+C<B::COP::stashlen> has been replaced with C<B::COP::stashoff>.
+
+C<B::COP::stashpv> now supports UTF-8 package names and embedded NULs.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.14 to 1.15.
+
+Avoid warning when run under C<perl -w>.
+
+=item *
+
+L<Class::Struct> has been upgraded from version 0.63 to 0.64.
+
+The constructor now respects overridden accessor methods [perl #29230].
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.048 to 2.052.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.048 to 2.054.
+
+Upgrade bundled zlib to version 1.2.7.
+
+Fix build failures on Irix, Solaris, and Win32, and also when building as C++
+[rt.cpan.org #69985], [rt.cpan.org #77030], [rt.cpan.org #75222].
+
+=item *
+
+L<CPAN::Meta> has been upgraded from version 2.120630 to 2.120921.
+
+=item *
+
+L<CPAN::Meta::Requirements> has been upgraded from version 2.120630 to 2.122.
+
+Treat undef requirements to C<from_string_hash> as 0 (with a warning).
+
+Added C<requirements_for_module> method.
+
+=item *
+
+L<CPAN::Meta::YAML> has been upgraded from version 0.007 to 0.008.
+
+=item *
+
+L<CPANPLUS> has been upgraded from version 0.9121 to 0.9130.
+
+Allow adding F<blib/script> to PATH.
+
+Save the history between invocations of the shell.
+
+Handle multiple C<makemakerargs> and C<makeflags> arguments better.
+
+Use C<File::HomeDir> when available, and provide C<PERL5_CPANPLUS_HOME> to
+override the autodetection.
+
+Always re-fetch F<CHECKSUMS> if C<fetchdir> is set.
+
+=item *
+
+L<Digest::MD5> has been upgraded from version 2.51 to 2.52.
+
+Fix C<Digest::Perl::MD5> OO fallback [rt.cpan.org #66634].
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.14 to 1.15.
+
+This is due to a minor code change in the XS for the VMS implementation.
 
 =item *
 
 L<ExtUtils::CBuilder> has been upgraded from version 0.280206 to 0.280208.
 
-It no longer fails when trying to embed manifests on Windows
-[perl #111782, #111798].
+Manifest files are now correctly embedded for those versions of VC++ which
+make use of them. [perl #111782, #111798].
 
 =item *
 
 L<File::DosGlob> has been upgraded from version 1.07 to 1.08.
 
-There are no visible changes, only minor internal refactorings.
+=item *
+
+L<File::Fetch> has been upgraded from version 0.32 to 0.34.
 
 =item *
 
@@ -142,223 +226,214 @@ the root directory twice [perl #111510].
 
 =item *
 
-L<IO> has been upgraded from version 1.25_06 to 1.25_07.
-
-C<sync()> can now be called on read-only file handles [perl #64772].
+L<Filter::Util::Call> has been upgraded from version 1.40 to 1.45.
 
 =item *
 
-L<Pod::Html> has been upgraded from version 1.15_02 to 1.16.
+L<HTTP::Tiny> has been upgraded from version 0.017 to 0.022.
 
-The option C<--libpods> has been re-instated. It is deprecated, and its use
-does nothing other than issue a warning that it is no longer supported.
+Add SSL verification features [github #6], [github #9].
+
+Include the final URL in the response hashref.
+
+Add C<local_address> option.
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.43 to 0.44.
+L<IO> has been upgraded from version 1.25_06 to 1.25_07.
 
-This adds a function L<all_casefolds()|Unicode::UCD/all_casefolds()>
-that returns all the casefolds.
+C<sync()> can now be called on read-only file handles [perl #64772].
 
-=back
+=item *
 
-=head2 Removed Modules and Pragmata
+L<IPC::Cmd> has been upgraded from version 0.76 to 0.78.
 
-=over 4
+Use C<POSIX::_exit> instead of C<exit> in C<run_forked> [rt.cpan.org #76901].
 
 =item *
 
-XXX
+L<Memoize> has been upgraded from version 1.02 to 1.03.
 
-=back
+Fix the C<MERGE> cache option.
 
-=head1 Documentation
+=item *
 
-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>.
+L<Module::Build> has been upgraded from version 0.39_01 to 0.40.
 
-=head2 New Documentation
+Fixed bug where modules without C<$VERSION> might have a version of '0' listed
+in 'provides' metadata, which will be rejected by PAUSE.
 
-XXX Changes which create B<new> files in F<pod/> go here.
+Fixed bug in PodParser to allow numerals in module names.
 
-=head3 L<XXX>
+Fixed bug where giving arguments twice led to them becoming arrays, resulting
+in install paths like F<ARRAY(0xdeadbeef)/lib/Foo.pm>.
 
-XXX Description of the purpose of the new file here
+=item *
 
-=head2 Changes to Existing Documentation
+L<Module::Load::Conditional> has been upgraded from version 0.46 to 0.50.
 
-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.
+Fix use of C<requires> on perls installed to a path with spaces.
 
-=head3 L<XXX>
+=item *
 
-=over 4
+L<Object::Accessor> has been upgraded from version 0.42 to 0.44.
 
 =item *
 
-XXX Description of the change here
+L<Params::Check> has been upgraded from version 0.32 to 0.36.
 
-=back
-
-=head1 Diagnostics
+=item *
 
-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>.
+L<Parse::CPAN::Meta> has been upgraded from version 1.4402 to 1.4404.
 
-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.
+=item *
 
-[ Within each section, list entries as a =item entry that links to perldiag,
-  e.g.
+L<PerlIO::mmap> has been upgraded from version 0.010 to 0.011.
 
-  =item *
+=item *
 
-  L<Invalid version object|perldiag/"Invalid version object">
-]
+L<PerlIO::via::QuotedPrint> has been upgraded from version 0.06 to 0.07.
 
-=head2 New Diagnostics
+=item *
 
-XXX Newly added diagnostic messages go here
+L<Pod::Html> has been upgraded from version 1.15_02 to 1.16.
 
-=head3 New Errors
+The option C<--libpods> has been reinstated. It is deprecated, and its use
+does nothing other than issue a warning that it is no longer supported.
 
-=over 4
+Since the HTML files generated by pod2html claim to have a UTF-8 charset,
+actually write the files out using UTF-8 [perl #111446].
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<POSIX> has been upgraded from version 1.30 to 1.31.
 
-=back
+=item *
 
-=head3 New Warnings
+L<re> has been upgraded from version 0.19 to 0.20.
 
-=over 4
+See note about C<op_comp> in the L</Internal Changes> section below.
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<Safe> has been upgraded from version 2.31_01 to 2.33_01.
 
-=back
+Fix interactions with C<Devel::Cover>.
 
-=head2 Changes to Existing Diagnostics
+Don't eval code under C<no strict>.
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
+=item *
 
-=over 4
+L<Scalar::Util> has been upgraded from version 1.23 to version 1.25.
 
-=item *
+Fix an overloading issue with C<sum>.
 
-XXX Describe change here
+C<first> and C<reduce> now check the callback first (so C<&first(1)> is
+disallowed).
 
-=back
+Fix C<tainted> on magical values [rt.cpan.org #55763].
 
-=head2 Removals of Diagnostics
+Fix C<sum> on previously magical values [rt.cpan.org #61118].
 
-=over 4
+Fix reading past the end of a fixed buffer [rt.cpan.org #72700].
 
 =item *
 
-The "Runaway prototype" warning that occurs in bizarre cases has been
-removed as being unhelpful and inconsistent.
+L<Search::Dict> has been upgraded from version 1.04 to 1.07.
 
-=back
+No longer require C<stat> on filehandles.
+
+Use C<fc> for casefolding.
 
-=head1 Utility Changes
+=item *
+
+L<Storable> has been upgraded from version 2.35 to 2.36.
 
-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>.
+=item *
 
-[ 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. ]
+L<Term::ANSIColor> has been upgraded from version 3.01 to 3.02.
 
-=head3 L<XXX>
+Add support for italics.
 
-=over 4
+Improve error handling.
 
 =item *
 
-XXX
+L<Test::Harness> has been upgraded from version 3.23 to 3.25.
 
-=back
+Fix glob semantics on Win32 [rt.cpan.org #49732].
 
-=head1 Configuration and Compilation
+Don't use C<Win32::GetShortPathName> when calling perl [rt.cpan.org #47890].
 
-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.
+Ignore -T when reading shebang [rt.cpan.org #64404].
 
-[ List changes as a =item entry ].
+Handle the case where we don't know the wait status of the test more
+gracefully.
 
-=over 4
+Make the test summary 'ok' line overridable so that it can be changed to a
+plugin to make the output of prove idempotent.
+
+Don't run world-writable files.
 
 =item *
 
-XXX
+L<Unicode::UCD> has been upgraded from version 0.43 to 0.44.
+
+This adds a function L<all_casefolds()|Unicode::UCD/all_casefolds()>
+that returns all the casefolds.
 
 =back
 
-=head1 Testing
+=head1 Documentation
 
-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.
+=head2 Changes to Existing Documentation
 
-[ List each test improvement as a =item entry ]
+=head3 L<perlfaq>
 
 =over 4
 
 =item *
 
-XXX
+L<perlfaq> has been synchronized with version 5.0150040 from CPAN.
 
 =back
 
-=head1 Platform Support
+=head3 L<perlcheat>
 
-XXX Any changes to platform support should be listed in the sections below.
+=over 4
 
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
+=item *
 
-=head2 New Platforms
+L<perlcheat> has been reorganized, and a few new sections were added.
 
-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.
+=back
 
-=over 4
+=head1 Diagnostics
 
-=item XXX-some-platform
+=head2 Removals of Diagnostics
 
-XXX
+=over 4
 
-=back
+=item *
 
-=head2 Discontinued Platforms
+The "Runaway prototype" warning that occurs in bizarre cases has been
+removed as being unhelpful and inconsistent.
 
-XXX List any platforms that this version of perl no longer compiles on.
+=item *
 
-=over 4
+The "Not a format reference" error has been removed, as the only case in
+which it could be triggered was a bug.
 
-=item XXX-some-platform
+=item *
 
-XXX
+The "Unable to create sub named %s" error has been removed for the same
+reason.
 
 =back
 
-=head2 Platform-Specific Notes
+=head1 Platform Support
 
-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.
+=head2 Platform-Specific Notes
 
 =over 4
 
@@ -367,15 +442,23 @@ L</Modules and Pragmata> section.
 C<link> on Win32 now attempts to set C<$!> to more appropriate values
 based on the Win32 API error code. [perl #112272]
 
-=back
+Perl no longer mangles the environment block, e.g. when launching a new
+sub-process, when the environment contains non-ASCII characters. Known
+problems still remain, however, when the environment contains characters
+outside of the current ANSI codepage (e.g. see the item about Unicode in
+C<%ENV> in L<http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/todo.pod>).
+[perl #113536]
 
-=head1 Internal Changes
+=item VMS
 
-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.
+All C header files from the top-level directory of the distribution are now
+installed on VMS, providing consistency with a long-standing practice on other
+platforms. Previously only a subset were installed, which broke non-core extension
+builds for extensions that depended on the missing include files.
 
-[ List each change as a =item entry ]
+=back
+
+=head1 Internal Changes
 
 =over 4
 
@@ -392,20 +475,129 @@ COP to store its package name (C<< cop->stashpv >>).  Instead, there is an
 offset (C<< cop->stashoff >>) into the new C<PL_stashpad> array, which
 holds stash pointers.
 
+=item *
+
+In the pluggable regex API, the C<regexp_engine> struct has acquired a new
+field C<op_comp>, which is currently just for perl's internal use, and
+should be initialised to NULL by other regex plugin modules.
+
+=item *
+
+A new function C<alloccoptash> has been added to the API, but is considered
+experimental.  See L<perlapi>.
+
 =back
 
 =head1 Selected Bug Fixes
 
-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>.
+=over 4
+
+=item *
 
-[ List each fix as a =item entry ]
+The implementation of code blocks in regular expressions, such as C<(?{})>
+and C<(??{})>, has been heavily reworked to eliminate a whole slew of bugs.
+The main user-visible changes are:
 
 =over 4
 
 =item *
 
+Code blocks within patterns are now parsed in the same pass as the
+surrounding code; in particular it is no longer necessary to have balanced
+braces: this now works:
+
+    /(?{  $x='{'  })/
+
+This means that this error message is longer generated:
+
+    Sequence (?{...}) not terminated or not {}-balanced in regex
+
+but a new error may be seen:
+
+    Sequence (?{...}) not terminated with ')'
+
+In addition, literal code blocks within run-time patterns are only
+compiled once, at perl compile-time:
+
+    for my $p (...) {
+        # this 'FOO' block of code is compiled once,
+       # at the same time as the surrounding 'for' loop
+        /$p{(?{FOO;})/;
+    }
+
+=item *
+
+Lexical variables are now sane as regards scope, recursion and closure
+behavior. In particular, C</A(?{B})C/> behaves (from a closure viewpoint)
+exactly like C</A/ && do { B } && /C/>, while  C<qr/A(?{B})C/> is like
+C<sub {/A/ && do { B } && /C/}>. So this code now works how you might
+expect, creating three regexes that match 0, 1, and 2:
+
+    for my $i (0..2) {
+        push @r, qr/^(??{$i})$/;
+    }
+    "1" =~ $r[1]; # matches
+
+=item *
+
+The C<use re 'eval'> pragma is now only required for code blocks defined
+at runtime; in particular in the following, the text of the C<$r> pattern is
+still interpolated into the new pattern and recompiled, but the individual
+compiled code-blocks within C<$r> are reused rather than being recompiled,
+and C<use re 'eval'> isn't needed any more:
+
+    my $r = qr/abc(?{....})def/;
+    /xyz$r/;
+
+=item *
+
+Flow control operators no longer crash. Each code block runs in a new
+dynamic scope, so C<next> etc. will not see any enclosing loops and
+C<caller> will not see any calling subroutines. C<return> returns a value
+from the code block, not from any enclosing subroutine.
+
+=item *
+
+Perl normally caches the compilation of run-time patterns, and doesn't
+recompile if the pattern hasn't changed, but this is now disabled if
+required for the correct behavior of closures. For example:
+
+    my $code = '(??{$x})';
+    for my $x (1..3) {
+       # recompile to see fresh value of $x each time
+        $x =~ /$code/;
+    }
+
+
+=item *
+
+The C</msix> and C<(?msix)> etc. flags are now propagated into the return
+value from C<(??{})>; this now works:
+
+    "AB" =~ /a(??{'b'})/i;
+
+=item *
+
+Warnings and errors will appear to come from the surrounding code (or for
+run-time code blocks, from an eval) rather than from an C<re_eval>:
+
+    use re 'eval'; $c = '(?{ warn "foo" })'; /$c/;
+    /(?{ warn "foo" })/;
+
+formerly gave:
+
+    foo at (re_eval 1) line 1.
+    foo at (re_eval 2) line 1.
+
+and now gives:
+
+    foo at (eval 1) line 1.
+    foo at /some/prog line 2.
+
+=back
+
+=item *
+
 Perl now works as well as can be expected on all releases of Unicode so
 far.  In v5.16, it worked on Unicodes 6.0 and 6.1, but there were
 various bugs for earlier releases; the older the release the more
@@ -418,19 +610,30 @@ C<vec> no longer produces "uninitialized" warnings in lvalue context
 
 =item *
 
-An optimisation involving fixed strings in regular expressions could cause
+An optimization involving fixed strings in regular expressions could cause
 a severe performance penalty in edge cases.  This has been fixed
 [perl #76546].
 
 =item *
 
+In certain cases, including empty subpatterns within a regular expression (such
+as C<(?:)> or C<(?:|)>) could disable some optimizations. This has been fixed.
+
+=item *
+
 The "Can't find an opnumber" message that C<prototype> produces when passed
-a string like "CORE::nonexistent_keyword" is now passes UTF8 and embedded
-nulls through unchanged [perl #97478].
+a string like "CORE::nonexistent_keyword" now passes UTF-8 and embedded
+NULs through unchanged [perl #97478].
+
+=item *
+
+C<prototype> now treats magical variables like C<$1> the same way as
+non-magical variables when checking for the CORE:: prefix, instead of
+treating them as subroutine names.
 
 =item *
 
-Under threaded perls, a run-time code block in a regular expression could
+Under threaded perls, a runtime code block in a regular expression could
 corrupt the package name stored in the op tree, resulting in bad reads
 in C<caller>, and possibly crashes [perl #113060].
 
@@ -453,31 +656,102 @@ to see a stack frame belonging to that deleted package.  C<caller> could
 crash if the stash's memory address was reused for a scalar and a
 substitution was performed on the same scalar [perl #113486].
 
-=back
+=item *
 
-=head1 Known Problems
+C<UNIVERSAL::can> no longer treats its first argument differently
+depending on whether it is a string or number internally.
 
-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 *
+
+C<open> with C<< <& >> for the mode checks to see whether the third argument is
+a number, in determining whether to treat it as a file descriptor or a handle
+name.  Magical variables like C<$1> were always failing the numeric check and
+being treated as handle names.
 
-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 ]
+C<warn>'s handling of magical variables (C<$1>, ties) has undergone several
+fixes.  C<FETCH> is only called once now on a tied argument or a tied C<$@>
+[perl #97480].  Tied variables returning objects that stringify as "" are
+no longer ignored.  A tied C<$@> that happened to return a reference the
+I<previous> time is was used is no longer ignored.
 
-=over 4
+=item *
+
+C<warn ""> now treats C<$@> with a number in it the same way, regardless of
+whether it happened via C<$@=3> or C<$@="3">.  It used to ignore the
+former.  Now it appends "\t...caught", as it has always done with
+C<$@="3">.
 
 =item *
 
-XXX
+Numeric operators on magical variables (e.g., S<C<$1 + 1>>) used to use
+floating point operations even where integer operations were more appropriate,
+resulting in loss of accuracy on 64-bit platforms [perl #109542].
+
+=item *
+
+Unary negation no longer treats a string as a number if the string happened
+to be used as a number at some point.  So, if C<$x> contains the string "dogs",
+C<-$x> returns "-dogs" even if C<$y=0+$x> has happened at some point.
+
+=item *
+
+In Perl 5.14, C<-'-10'> was fixed to return "10", not "+10".  But magical
+variables (C<$1>, ties) were not fixed till now [perl #57706].
+
+=item *
+
+Unary negation now treats strings consistently, regardless of the internal
+C<UTF8> flag.
+
+=item *
+
+A regression introduced in Perl v5.16.0 involving
+C<tr/I<SEARCHLIST>/I<REPLACEMENTLIST>/> has been fixed.  Only the first
+instance is supposed to be meaningful if a character appears more than
+once in C<I<SEARCHLIST>>.  Under some circumstances, the final instance
+was overriding all earlier ones.  [perl #113584]
+
+=item *
+
+Regular expressions like C<qr/\87/> previously silently inserted a NUL
+character, thus matching as if it had been written C<qr/\00087/>.  Now it
+matches as if it had been written as C<qr/87/>, with a message that the
+sequence C<"\8"> is unrecognized.
+
+=item *
+
+C<__SUB__> now works in special blocks (C<BEGIN>, C<END>, etc.).
+
+=item *
+
+Thread creation on Windows could theoretically result in a crash if done
+inside a C<BEGIN> block.  It still does not work properly, but it no longer
+crashes [perl #111610].
+
+=item *
+
+C<\&{''}> (with the empty string) now autovivifies a stub like any other
+sub name, and no longer produces the "Unable to create sub" error
+[perl #94476].
 
 =back
 
-=head1 Obituary
+=head1 Known Problems
+
+=over 4
+
+=item *
+
+On VMS, L<Module::Build> still fails its test suite.
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+=item *
+
+On Win32, several tests fail intermittently, and may hang unless STDERR is
+redirected.
+
+=back
 
 =head1 Acknowledgements