This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for =>
[perl5.git] / pod / perldelta.pod
index 0bc2cd0..b6334ab 100644 (file)
@@ -5,13 +5,16 @@
 [ 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.19.1
+perldelta - what is new for perl v5.19.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.19.0 release and the 5.19.1
+This document describes differences between the 5.19.1 release and the 5.19.2
 release.
 
+If you are upgrading from an earlier release such as 5.19.0, first read
+L<perl5191delta>, which describes differences between 5.19.0 and 5.19.1.
+
 =head1 Notice
 
 XXX Any important notices here
@@ -22,7 +25,20 @@ XXX New core language features go here.  Summarize 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 consistent prototype parsing
+
+Multiple semicolons in subroutine prototypes have long been tolerated and
+treated as a single semicolon.  There was one case where this did not
+happen.  A subroutine whose prototype begins with "*" or ";*" can affect
+whether a bareword is considered a method name or sub call.  This now
+applies also to ";;;*".
+
+Whitespace has long been allowed inside subroutine prototypes, so
+C<sub( $ $ )> is equivalent to C<sub($$)>.  But it was stripped when the
+subroutine was parse.  Hence, whitespace was I<not> allowed in prototypes
+set by C<Scalar::Util::set_prototype>.  Now it is permitted, and the parser
+no longer strips whitespace.  This means C<prototype &mysub> returns the
+original prototype, whitespace and all.
 
 =head1 Security
 
@@ -42,11 +58,6 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 Most regex engine global state eliminated
-
-As part of this series of fixes it was necessary to change the API of
-Perl_re_intuit_start().  See L</Internal Changes> for more.
-
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -55,27 +66,24 @@ XXX Any deprecated features, syntax, modules etc. should be listed here.
 
 XXX Remove this section if inapplicable.
 
-The following modules will be removed from the core distribution in a future
-release, and will at that time need to be installed from CPAN. Distributions
-on CPAN which require these modules will need to list them as prerequisites.
+The following modules will be removed from the core distribution in a
+future release, and will at that time need to be installed from CPAN.
+Distributions on CPAN which require these modules will need to list them as
+prerequisites.
 
 The core versions of these modules will now issue C<"deprecated">-category
-warnings to alert you to this fact. To silence these deprecation warnings,
+warnings to alert you to this fact.  To silence these deprecation warnings,
 install the modules in question from CPAN.
 
 Note that these are (with rare exceptions) fine modules that you are encouraged
-to continue to use. Their disinclusion from core primarily hinges on their
+to continue to use.  Their disinclusion from core primarily hinges on their
 necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
 not usually on concerns over their design.
 
-XXX Note that deprecated modules should be listed here even if they are listed
-as an updated module in the L</Modules and Pragmata> section.
-
 =over
 
-=item *
-
-XXXX
+XXX Note that deprecated modules should be listed here even if they are listed
+as an updated module in the L</Modules and Pragmata> section.
 
 =back
 
@@ -92,21 +100,7 @@ There may well be none in a stable release.
 
 =item *
 
-Perl has a new copy-on-write mechanism that avoids the need to copy the
-internal string buffer when assigning from one scalar to another. This
-makes copying large strings appear much faster.  Modifying one of the two
-(or more) strings after an assignment will force a copy internally. This
-makes it unnecessary to pass strings by reference for efficiency.
-
-This feature was already available in 5.18.0, but wasn't enabled by
-default. It is the default now, and so you no longer need build perl with
-the F<Configure> argument:
-
-    -Accflags=PERL_NEW_COPY_ON_WRITE
-
-It can be disabled (for now) in a perl build with:
-
-    -Accflags=PERL_NO_COW
+XXX
 
 =back
 
@@ -138,45 +132,48 @@ XXX
 
 =item *
 
-B::Deparse has been upgraded from version 1.20 to 1.21.
-
-C<foreach my $lexical> is now deparsed correctly with the B<-p> option.
-[RT #117081]
+L<ExtUtils::Embed> has been upgraded from version 1.30 to 1.31
 
-The B<-l> option no longer puts form feeds in the middle of a line when
-outputting C<map> and C<grep> blocks. [RT #117311]
+The generated C<C> code now incorporates bug fixes present in
+F<miniperlmain.c>, and has whitespace changes. It now uses
+C<#include "..."> for header files instead of C<< #include <...> >>.
+This should not make any difference, unless programs embedding C<libperl>
+happen to have local and incompatible files named F<EXTERN.h>, F<XSUB.h> or
+F<perl.h>, as these will now be picked up instead of the installed Perl
+headers.
 
-Elements of C<%#>, such as C<$# {foo}> and C<${#}{foo}> are now deparsed
-correctly. [RT #117531]
+The C<canon()> function now correctly handles packages with multiple C<::>
+separators when the I<$as> parameter is not I</>. Given that it used to
+generate strings which would likely be syntax errors or pathnames instead of
+filenames, we infer that from the complete lack of bug reports no-one was
+using this functionality. (C<ExtUtils::Miniperl> is now using it.)
 
 =item *
 
-L<DB> has been updated from 1.05 to 1.06 and L<perl5db.pl> from 1.39_10
-to 1.40.  The call depth allowed by default in the debugger is now 1000
-rather than 100.
+L<ExtUtils::Miniperl> has been upgraded and given a version of 1.
+Previously it did not have a version number.
 
-=item *
-
-File::Spec has been upgraded from version 3.40 to 3.41.
+C<writemain()> now takes an optional first argument. A reference to a scalar
+is treated as a filename to be opened and written to. Any other reference is
+used as the filehandle to write to. Otherwise the existing default remains,
+to write to C<STDOUT>.
 
-C<tmpdir> now respects changes to environment variables from which the
-temporary directory is derived. [RT #88940]
+C<writemain()> has been refactored to use functions from L<ExtUtils::Embed>,
+reducing code size and duplication. The internal function C<canon()> has been
+deleted.
 
 =item *
 
-Test::Harness has been upgraded from version 3.26 to 3.28
-
-Memory usage is dramatically reduced. t/harness now uses about 10% of the
-memory used by 3.26 and earlier.
+L<POSIX> has been upgraded from version 1.33 to 1.34.
 
-C<PERL5LIB> is always propagated to a test's C<@INC>, even under C<-T>.
+C<POSIX::AUTOLOAD> will no longer infinitely recurse if the shared
+object fails to load.
 
 =item *
 
-Unicode::UCD has been upgraded from version 0.51 to 0.52.
+L<Storable> has been upgraded from version 2.43 to 2.44.
 
-A function, L<Unicode::UCD/search_invlist()> is now available to do
-search an inversion list or map for a code point.
+Calling C<STORABLE_attach> hooks no longer leaks memory. [perl #118829]
 
 =back
 
@@ -209,23 +206,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.
 
-=head3 L<perllocale>
+=head3 L<perlexperiment>
 
-=over
+=over 4
 
 =item *
 
-Update to mention fc(), \F
+Code in regular expressions, regular expression backtracking verbs,
+and lvalue subroutines are no longer listed as experimental.  (This
+also affects L<perlre> and L<perlsub>.)
 
 =back
 
-=head3 L<perltrap>
+=head3 L<perlfunc>
 
 =over 4
 
 =item *
 
-There is now a L<JavaScript|perltrap/JavaScript Traps> section.
+Since Perl v5.10, it has been possible for subroutines in @INC to return
+a reference to a scalar holding initial source code to prepend to the file.
+This is now documented.
 
 =back
 
@@ -259,13 +260,11 @@ XXX L<message|perldiag/"message">
 
 =item *
 
-L<A sequence of multiple spaces in a charnames alias definition is deprecated|perldiag/"A sequence of multiple spaces in a charnames alias definition is deprecated">
-
-L<Trailing white-space in a charnames alias definition is deprecated|perldiag/"Trailing white-space in a charnames alias definition is deprecated">
+L<Missing ']' in prototype for %s : %s|perldiag/"Missing ']' in prototype
+for %s : %s">
 
-These two deprecation warnings involving C<\N{...}> were incorrectly
-implemented.  They did not warn by default (now they do) and could not be
-made fatal via C<use warnings FATAL => 'deprecated'> (now they can).
+(W illegalproto) A grouping was started with C<[> but never closed with
+C<]>.
 
 =back
 
@@ -277,56 +276,62 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+Under rare circumstances, one could get a "Can't coerce readonly REF to
+string" instead of the customary "Modification of a read-only value".  This
+alternate error message has been removed.
 
-=back
+=item *
 
-=head1 Utility Changes
+"Ambiguous use of * resolved as operator *": This and similar warnings
+about "%" and "&" used to occur in some circumstances where there was no
+operator of the type cited, so the warning was completely wrong.  This has
+been fixed [perl #117535, #76910].
 
-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. ]
+Warnings about malformed subroutine prototypes are now more consistent in
+how the prototypes are rendered.  Some of these warnings would truncate
+prototypes containing nulls.  In other cases one warning would suppress
+another.  The warning about illegal characters in prototypes no longer says
+"after '_'" if the bad character came before the underscore.
 
-=head3 F<bisect.pl> enhancements
+=item *
 
-The git bisection tool F<Porting/bisect.pl> has had many enhancements.
+L<Perl folding rules are not up-to-date for 0x%X; please use the perlbug
+utility to report; in regex; marked by <-- HERE in
+mE<sol>%sE<sol>|perldiag/"Perl folding rules are not up-to-date for 0x%X;
+please use the perlbug utility to report; in regex; marked by <-- HERE in
+m/%s/">
 
-=over 4
+This message is now only in the regexp category, and not in the deprecated
+category.  It is still a default (i.e., severe) warning [perl #89648].
 
 =item *
 
-Can optionally run the test case with a timeout.
+The debugger's "n" command now respects lvalue subroutines and steps over
+them [perl #118839].
 
-=item *
+=back
 
-Can now run in-place in a clean git checkout.
+=head1 Utility Changes
 
-=item *
+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>.
 
-Can run the test case under C<valgrind>.
+[ 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 *
+=head3 L<XXX>
 
-Can apply user supplied patches and fixes to the source checkout before
-building.
+=over 4
 
 =item *
 
-Now has fixups to enable building several more historical ranges of bleadperl,
-which can be useful for pinpointing the origins of bugs or behaviour changes.
+XXX
 
 =back
 
-It is provided as part of the source distribution but not installed because
-it is not self-contained as it relies on being run from within a git
-checkout. Note also that it makes no attempt to fix tests, correct runtime
-bugs or make something useful to install - its purpose is to make minimal
-changes to get any historical revision of interest to build and run as close
-as possible to "as-was", and thereby make C<git bisect> easy to use.
-
 =head1 Configuration and Compilation
 
 XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
@@ -340,7 +345,32 @@ L</Platform Support> section, instead.
 
 =item *
 
-XXX
+F<installperl> and F<installman>'s option handling has been refactored to use
+L<Getopt::Long>. Both are used by the F<Makefile> C<install> targets, and
+are not installed, so these changes are only likely to affect custom
+installation scripts.
+
+=over 4
+
+=item *
+
+single letter options now also have long names
+
+=item *
+
+invalid options are now rejected
+
+=item *
+
+command line arguments that are not options are now rejected
+
+=item *
+
+Each now has a C<--help> option to display the usage message.
+
+=back
+
+The behaviour for all valid documented invocations is unchanged.
 
 =back
 
@@ -390,11 +420,6 @@ XXX List any platforms that this version of perl no longer compiles on.
 
 =over 4
 
-=item DG/UX
-
-DG/UX was a Unix sold by Data General. The last release was in April 2001.
-It only runs on Data General's own hardware.
-
 =item XXX-some-platform
 
 XXX
@@ -410,23 +435,12 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item Mixed-endian platforms
-
-The code supporting C<pack> and C<unpack> operations on mixed endian
-platforms has been removed. We believe that Perl has long been unable to
-build on mixed endian architectures (such as PDP-11s), so we don't think
-that this change will affect any platforms which are able to build v5.18.0.
-
-=item Windows
-
-The BUILD_STATIC and ALL_STATIC makefile options for linking some or (nearly)
-all extensions statically (into perl519.dll, and into a separate
-perl-static.exe too) were broken for MinGW builds. This has now been fixed.
+=item MidnightBSD
 
-The ALL_STATIC option has also been improved to include the Win32 extension,
-and also the Encode extension for VC++ builds. (However, Encode and
-Compress/Raw/Bzip2 are currently still excluded from MinGW builds. This will
-hopefully be rectified soon.)
+C<objformat> was removed from version 0.4-RELEASE of MidnightBSD and had been
+deprecated on earlier versions.  This caused the build environment to be
+erroneously configured for C<a.out> rather than C<elf>.  This has been now
+been corrected.
 
 =back
 
@@ -436,90 +450,61 @@ 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.
 
+[ List each change as a =item entry ]
+
 =over 4
 
 =item *
 
-Perl's new copy-on-write mechanism  (which is now enabled by default),
-allows any C<SvPOK> scalar to be automatically upgraded to a copy-on-write
-scalar when copied. A reference count on the string buffer is stored in
-the string buffer itself.
-
-For example:
-
-    $ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
-    SV = PV(0x260cd80) at 0x2620ad8
-      REFCNT = 1
-      FLAGS = (POK,IsCOW,pPOK)
-      PV = 0x2619bc0 "abc"\0
-      CUR = 3
-      LEN = 16
-      COW_REFCNT = 1
-    SV = PV(0x260ce30) at 0x2620b20
-      REFCNT = 1
-      FLAGS = (POK,IsCOW,pPOK)
-      PV = 0x2619bc0 "abc"\0
-      CUR = 3
-      LEN = 16
-      COW_REFCNT = 1
-
-Note that both scalars share the same PV buffer and have a COW_REFCNT
-greater than zero.
-
-This means that XS code which wishes to modify the C<SvPVX()> buffer of an
-SV should call C<SvPV_force()> or similar first, to ensure a valid (and
-unshared) buffer, and to call C<SvSETMAGIC()> afterwards. This in fact has
-always been the case (for example hash keys were already copy-on-write);
-this change just spreads the COW behaviour to a wider variety of SVs.
-
-One important difference is that before 5.18.0, shared hash-key scalars
-used to have the C<SvREADONLY> flag set; this is no longer the case.
+The Makefile shortcut targets for many rarely (or never) used testing and
+profiling targets have been removed, or merged into the only other Makefile
+target that uses them.  Specifically, these targets are gone, along with
+documentation that referenced them or explained how to use them:
 
-This new behaviour can still be disabled by running F<Configure> with
-B<-Accflags=-DPERL_NO_COW>.  This option will probably be removed in Perl
-5.22.
+    check.third check.utf16 check.utf8 coretest minitest.prep
+    minitest.utf16 perl.config.dashg perl.config.dashpg
+    perl.config.gcov perl.gcov perl.gprof perl.gprof.config
+    perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
+    perl.third perl.third.config perl.valgrind.config purecovperl
+    pureperl quantperl test.deparse test.taintwarn test.third
+    test.torture test.utf16 test.utf8 test_notty.deparse
+    test_notty.third test_notty.valgrind test_prep.third
+    test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
+    ucheck.valgrind utest utest.third utest.utf16 utest.valgrind
 
-=item *
-
-C<PL_sawampersand> is now a constant.  The switch this variable provided
-(to enable/disable the pre-match copy depending on whether C<$&> had been
-seen) has been removed and replaced with copy-on-write, eliminating a few
-bugs.
-
-The previous behaviour can still be enabled by running F<Configure> with
-B<-Accflags=-DPERL_SAWAMPERSAND>.
+It's still possible to run the relevant commands by "hand" - no underlying
+functionality has been removed.
 
 =item *
 
-The functions C<my_swap>, C<my_htonl> and C<my_ntohl> have been removed.
-It is unclear why these functions were ever marked as I<A>, part of the
-API. XS code can't call them directly, as it can't rely on them being
-compiled. Unsurprisingly, no code on CPAN references them.
+It is now possible to keep Perl from initializing locale handling.
+For the most part, Perl doesn't pay attention to locale.  (See
+L<perllocale>.)  Nonetheless, until now, on startup, it has always
+initialized locale handling to the system default, just in case the
+program being executed ends up using locales.  (This is one of the first
+things a locale-aware program should do, long before Perl knows if it
+will actually be needed or not.)  This works well except when Perl is
+embedded in another application which wants a locale that isn't the
+system default.  Now, if the environment variable
+C<PERL_SKIP_LOCALE_INIT> is set at the time Perl is started, this
+initialization step is skipped.  Prior to this, on Windows platforms,
+the only workaround for this deficiency was to use a hacked-up copy of
+internal Perl code.  Applications that need to use older Perls can
+discover if the embedded Perl they are using needs the workaround by
+testing that the C preprocessor symbol C<HAS_SKIP_LOCALE_INIT> is not
+defined.  (RT #38193)
 
 =item *
 
-The signature of the C<Perl_re_intuit_start()> regex function has changed;
-the function pointer C<intuit> in the regex engine plugin structure
-has also changed accordingly. A new parameter, C<strbeg> has been added;
-this has the same meaning as the same-named parameter in
-C<Perl_regexec_flags>. Previously intuit would try to guess the start of
-the string from the passed SV (if any), and would sometimes get it wrong
-(e.g. with an overloaded SV).
+C<BmRARE> and C<BmPREVIOUS> have been removed.  They were not used anywhere
+and are not part of the API.  For XS modules, they are now #defined as 0.
 
 =item *
 
-XS code may use various macros to change the case of a character or code
-point (for example C<toLOWER_utf8()>).  Only a couple of these were
-documented until now;
-and now they should be used in preference to calling the underlying
-functions.  See L<perlapi/Character case changing>.
-
-=item *
-
-The code dealt rather inconsistently with uids and gids. Some
-places assumed that they could be safely stored in UVs, others
-in IVs, others in ints. Four new macros are introduced:
-SvUID(), sv_setuid(), SvGID(), and sv_setgid()
+C<sv_force_normal>, which usually croaks on read-only values, used to allow
+read-only values to be modified at compile time.  This has been changed to
+croak on read-only values regardless.  This change uncovered several core
+bugs.
 
 =back
 
@@ -534,127 +519,122 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
-The OP allocation code now returns correctly aligned memory in all cases
-for C<struct pmop>. Previously it could return memory only aligned to a
-4-byte boundary, which is not correct for an ithreads build with 64 bit IVs
-on some 32 bit platforms. Notably, this caused the build to fail completely
-on sparc GNU/Linux. [RT #118055]
-
-=item *
-
-The debugger's C<man> command been fixed. It was broken in the v5.18.0
-release. The C<man> command is aliased to the names C<doc> and C<perldoc> -
-all now work again.
-
-=item *
-
-C<@_> is now correctly visible in the debugger, fixing a regression
-introduced in v5.18.0's debugger. [RT #118169]
-
-=item *
-
-Evaluating large hashes in scalar context is now much faster, as the number
-of used chains in the hash is now cached for larger hashes. Smaller hashes
-continue not to store it and calculate it when needed, as this saves one IV.
-That would be 1 IV overhead for every object built from a hash. [RT #114576]
+There have been several fixes related to Perl's handling of locales.  perl
+#38193 was described above in L</Internal Changes>.
+Also fixed is #112208 in which the error string in C<$!> displayed as
+garbage in many UTF-8 locales;
+#118197, where the radix (decimal point) character had to be an ASCII
+character (which doesn't work for some non-Western languages);
+and #115808, in which C<POSIX::setlocale()> on failure returned an
+C<undef> which didn't warn about not being defined even if those
+warnings were enabled.
 
 =item *
 
-Fixed a small number of regexp constructions that could either fail to
-match or crash perl when the string being matched against was
-allocated above the 2GB line on 32-bit systems. [RT #118175]
+The dtrace sub-entry probe now works with lexical subs, instead of
+crashing [perl #118305].
 
 =item *
 
-Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were
-not visible at compile time were treated as lvalues and could be assigned
-to, even when the subroutine was not an lvalue sub.  This has been fixed.
-[RT #117947]
+Compiling a C<split> operator whose third argument is a named constant
+evaulating to 0 no longer causes the constant's value to change.
 
 =item *
 
-In Perl v5.18.0 dualvars that had an empty string for the string part but a
-non-zero number for the number part starting being treated as true.  In
-previous versions they were treated as false, the string representation
-taking precedeence.  The old behaviour has been restored. [RT #118159]
+A named constant used as the second argument to C<index> no longer gets
+coerced to a string if it is a reference, regular expression, dualvar, etc.
 
 =item *
 
-Since Perl v5.12, inlining of constants that override built-in keywords of
-the same name had countermanded C<use subs>, causing subsequent mentions of
-the constant to use the built-in keyword instead.  This has been fixed.
+A named constant evaluating to the undefined value used as the second
+argument to C<index> no longer produces "uninitialized" warnings at compile
+time.  It will still produce them at run time.
 
 =item *
 
-Lexical constants (C<my sub a() { 42 }>) no longer crash when inlined.
+When a scalar was returned from a subroutine in @INC, the referenced scalar
+was magically converted into an IO thingy, possibly resulting in "Bizarre
+copy" errors if that scalar continued to be used elsewhere.  Now Perl uses
+an internal copy of the scalar instead.
 
 =item *
 
-Parameter prototypes attached to lexical subroutines are now respected when
-compiling sub calls without parentheses.  Previously, the prototypes were
-honoured only for calls I<with> parentheses. [RT #116735]
+Undefining an inlinable lexical subroutine (C<my sub foo() { 42 } undef
+&foo>) would result in a crash if warnings were turned on.
 
 =item *
 
-Syntax errors in lexical subroutines in combination with calls to the same
-subroutines no longer cause crashes at compile time.
+Certain uses of the C<sort> operator are optimised to modify an array in
+place, such as C<@a = sort @a>.  During the sorting, the array is made
+read-only.  If a sort block should happen to die, then the array remained
+read-only even outside the C<sort>.  This has been fixed.
 
 =item *
 
-The warning produced by C<-l $handle> now applies to IO refs and globs, not
-just to glob refs.  That warning is also now UTF8-clean. [RT #117595]
+C<$a> and C<$b> inside a sort block are aliased to the actual arguments to
+C<sort>, so they can be modified through those two variables.  This did not
+always work, e.g., for lvalue subs and C<$#ary>, and probably many other
+operators.  It works now.
 
 =item *
 
-Various memory leaks involving the parsing of the C<(?[...])> regular
-expression construct have been fixed.
+The arguments to C<sort> are now all in list context.  If the C<sort>
+itself were called in void or scalar context, then I<some>, but not all, of
+the arguments used to be in void or scalar context.
 
 =item *
 
-C<(?[...])> now allows interpolation of precompiled patterns consisting of
-C<(?[...])> with bracketed character classes inside (C<$pat =
-S<qr/(?[ [a] ])/;> S</(?[ $pat ])/>>).  Formerly, the brackets would
-confuse the regular expression parser.
+Subroutine prototypes with Unicode characters above U+00FF were getting
+mangled during closure cloning.  This would happen with subroutines closing
+over lexical variables declared outside, and with lexical subs.
 
 =item *
 
-The "Quantifier unexpected on zero-length expression" warning message could
-appear twice starting in Perl v5.10 for a regular expression also
-containing alternations (e.g., "a|b") triggering the trie optimisation.
+In regular expressions containing multiple code blocks, the values of
+C<$1>, C<$2>, etc., set by nested regular expression calls would leak from
+one block to the next.  Now these variables always refer to the outer
+regular expression at the start of an embedded block [perl #117917].
 
 =item *
 
-C<delete local $ENV{nonexistent_env_var}> no longer leaks memory.
+C<UNIVERSAL::can> now treats its first argument the same way that method
+calls do: Typeglobs and glob references with non-empty IO slots are treated
+as handles, and strings are treated as filehandles, rather than packages,
+if a handle with that name exists [perl #113932].
 
 =item *
 
-C<sort> and C<require> followed by a keyword prefixed with C<CORE::> now
-treat it as a keyword, and not as a subroutine or module name. [RT #24482]
+Method calls on typeglobs (e.g., C<< *ARGV->getline >>) used to stringify
+the typeglob and then look it up again.  Combined with changes in Perl
+5.18.0, this allowed C<< *foo->bar >> to call methods on the "foo" package
+(like C<< foo->bar >>).  In some cases it could cause the method to be
+called on the wrong handle.  Now a typeglob argument is treated as a
+handle (just like C<< (\*foo)->bar >>), or, if its IO slot is empty, an
+error is raised.
 
 =item *
 
-Through certain conundrums, it is possible to cause the current package to
-be freed.  Certain operators (C<bless>, C<reset>, C<open>, C<eval>) could
-not cope and would crash.  They have been made more resilient. [RT #117941]
+Under copy-on-write builds (the default as of 5.19.1) C<${'_<-e'}[0]> no
+longer gets mangled.  This is the first line of input saved for the
+debugger's use for one-liners [perl #118627].
 
 =item *
 
-Aliasing filehandles through glob-to-glob assignment would not update
-internal method caches properly if a package of the same name as the
-filehandle existed, resulting in filehandle method calls going to the
-package instead.  This has been fixed.
+Assigning a vstring to a tied variable or to a subroutine argument aliased
+to a nonexistent hash or array element now works, without flattening the
+vstring into a regular string.
 
 =item *
 
-C<./Configure -de -Dusevendorprefix> didn't default [RT #64126]
+C<pos>, C<tie>, C<tied> and C<untie> did not work
+properly on subroutine arguments aliased to nonexistent
+hash and array elements [perl #77814, #27010].
 
 =item *
 
-The C<Statement unlikely to be reached> warning was listed in
-L<perldiag> as an C<exec>-category warning, but was enabled and disabled
-by the C<syntax> category.  On the other hand, the C<exec> category
-controlled its fatal-ness.  It is now entirely handled by the C<exec>
-category.
+The C<< => >> fat arrow operator can now quote built-in keywords even if it
+occurs on the next line, making it consistent with how it treats other
+barewords.
 
 =back