This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Note CPAN upgrade in perldelta.
[perl5.git] / pod / perldelta.pod
index 892e7aa..f696818 100644 (file)
@@ -1,19 +1,24 @@
 =encoding utf8
 
 =encoding utf8
 
+=for comment
+A Windows-specific commit that may need mention (does this have any
+user-visible effects?):
+0c38a57 Remove exports of dummy set[ug]id functions on Windows
+
 =head1 NAME
 
 [ this is a template for a new perldelta file.  Any text flagged as XXX needs
 to be processed before release. ]
 
 =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.3
+perldelta - what is new for perl v5.17.5
 
 =head1 DESCRIPTION
 
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.17.2 release and the 5.17.3
+This document describes differences between the 5.17.4 release and the 5.17.5
 release.
 
 release.
 
-If you are upgrading from an earlier release such as 5.17.1, first read
-L<perl5172delta>, which describes differences between 5.17.1 and 5.17.2.
+If you are upgrading from an earlier release such as 5.17.3, first read
+L<perl5174delta>, which describes differences between 5.17.3 and 5.17.4.
 
 =head1 Notice
 
 
 =head1 Notice
 
@@ -27,12 +32,13 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Computed Labels
+=head2 Upgrade to Unicode 6.2
 
 
-The loop controls C<next>, C<last> and C<redo>, and the special C<dump>
-operator, now allow arbitrary expressions to be used to compute labels at run
-time.  Previously, any argument that was not a constant was treated as the
-empty string.
+Perl now supports the final version of Unicode 6.2.  Earlier releases in
+the 5.17 series supported Unicode 6.2 beta versions.  There were no
+substantive changes in the final Unicode 6.2 version from the most
+recent beta, included in Perl 5.17.4.  A list of changes from Unicode
+6.1 is at L<http://www.unicode.org/versions/Unicode6.2.0>.
 
 =head1 Security
 
 
 =head1 Security
 
@@ -42,30 +48,55 @@ L</Selected Bug Fixes> section.
 
 [ List each security issue as a =head2 entry ]
 
 
 [ List each security issue as a =head2 entry ]
 
-=head1 Incompatible Changes
+=head2 Avoid calling memset with a negative count
 
 
-[ List each incompatible change as a =head2 entry ]
+Poorly written perl code that allows an attacker to specify the count to perl's
+C<x> string repeat operator can already cause a memory exhaustion
+denial-of-service attack. A flaw in versions of perl before 5.15.5 can escalate
+that into a heap buffer overrun; coupled with versions of glibc before 2.16, it
+possibly allows the execution of arbitrary code.
 
 
-=head2 C<$ENV{foo}=undef> deletes value from environ, like C<delete $ENV{foo}>
+The flaw addressed to this commit has been assigned identifier CVE-2012-5195.
 
 
-This facilitates use of C<local()> with C<%ENV> entries.  In previous versions
-of Perl, C<undef> was converted to the empty string.
+=head1 Incompatible Changes
 
 
-=head2 Defined values stored in environment are forced to byte strings
+XXX For a release on a stable branch, this section aspires to be:
 
 
-A value stored in an environment variable has always been stringified.  In this
-release, it is converted to be only a byte string.  First, it is forced to be a
-only a string.  Then if the string is utf8 and the equivalent of
-C<utf8::downgrade()> works, that result is used; otherwise, the equivalent of
-C<utf8::encode()> is used, and a warning is issued about wide characters
-(L</Diagnostics>).
+    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.
 
 
-=head2 C<given> now aliases the global C<$_>
+[ List each incompatible change as a =head2 entry ]
 
 
-Instead of assigning to an implicit lexical C<$_>, C<given> now makes the
-global C<$_> an alias for its argument, just like C<foreach>.  However, it
-still uses lexical C<$_> if there is lexical C<$_> in scope (again, just like
-C<foreach>) [perl #114020].
+=head2 New Restrictions in Multi-Character Case-Insensitive Matching in Regular Expression Bracketed Character Classes
+
+Unicode has now withdrawn their previous recommendation for regular
+expressions to automatically handle cases where a single character can
+match multiple characters case-insensitively; for example, the letter
+LATIN SMALL LETTER SHARP S and the sequence C<ss>.  This is because
+it turns out to be impracticable to do this correctly in all
+circumstances.  Because Perl has tried to do this as best it can, it
+will continue to do so.  (We are considering an option to turn it off.)
+However, a new restriction is being added on such matches when they
+occur in [bracketed] character classes.  People were specifying
+things such as C</[\0-\xff]/i>, and being surprised that it matches the
+two character sequence C<ss> (since LATIN SMALL LETTER SHARP S occurs in
+this range).  This behavior is also inconsistent with the using a
+property instead of a range:  C<\p{Block=Latin1}> also includes LATIN
+SMALL LETTER SHARP S, but C</[\p{Block=Latin1}]/i> does not match C<ss>.
+The new rule is that for there to be a multi-character case-insensitive
+match within a bracketed character class, the character must be
+explicitly listed, and not as an end point of a range.  This more
+closely obeys the Principle of Least Astonishment.  See
+L<perlrecharclass/Bracketed Character Classes>.  Note that a bug [perl
+#89774], now fixed as part of this change, prevented the previous
+behavior from working fully.
+
+=head2 Change to Warnings About Lexical Subroutines
+
+The warnings category for lexical subroutines is now
+"experimental::lexical_subs", with two colons, not
+"experimental:lexical_subs";
 
 =head1 Deprecations
 
 
 =head1 Deprecations
 
@@ -118,174 +149,148 @@ XXX
 
 =item *
 
 
 =item *
 
-L<B> has been upgraded from version 1.36 to 1.37.  All C<CVf_*> and C<GVf_*>
-and more SV-related flag values are now provided as constants in the C<B::>
-namespace and available for export.  The default export list has not changed.
+L<AutoLoader> has been upgraded from version 5.72 to 5.73.
 
 =item *
 
 
 =item *
 
-L<B::Concise> has been upgraded from version 0.91 to 0.92.  The C<-nobanner>
-option has been fixed, and C<format>s can now be dumped.  When passed a sub
-name to dump, it will check also to see whether it is the name of a format.  If
-a sub and a format share the same name, it will dump both.
+L<B::Deparse> has been upgraded from version 1.17 to 1.18.  It no longer
+dies when deparsing C<sort> without arguments.  It now correctly omits the
+comma for C<system $prog @args> and C<exec $prog @args>.
 
 =item *
 
 
 =item *
 
-L<B::Debug> has been upgraded from version 1.17 to 1.18.  This adds support
-(experimentally) for C<B::PADLIST>, which will be added in Perl 5.17.4.
+L<bignum>, L<bigint> and L<bigrat> have been upgraded from version 0.30 to
+0.31.  The overrides for C<hex> and C<oct> have been rewritten, eliminating
+several problems, and making one incompatible change:
 
 
-=item *
-
-L<B::Deparse> has been upgraded from version 1.15 to 1.16.  It now deparses
-loop controls with the correct precedence, and multiple statements in a
-C<format> line are also now deparsed correctly.
+=over
 
 =item *
 
 
 =item *
 
-L<CGI> has been upgraded from version 3.59 to 3.60.  Unrecognized HTML escape
-sequences are now handled better, problematic trailing newlines are no longer
-inserted after E<lt>formE<gt> tags by C<startform()> or C<start_form()>, and
-bogus "Insecure Dependency" warnings appearing with some versions of perl are
-now worked around.
+Formerly, whichever of C<use bigint> or C<use bigrat> was compiled later
+would take precedence over the other, causing C<hex> and C<oct> not to
+respect the other pragma when in scope.
 
 =item *
 
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.05201 to 2.055.  The
-misuse of Perl's "magic" API has been fixed.
+Using any of these three pragmata would cause C<hex> and C<oct> anywhere
+else in the program to evalute their arguments in list context and prevent
+them from inferring $_ when called without arguments.
 
 =item *
 
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.05401 to 2.056.  The
-misuse of Perl's "magic" API has been fixed.
+Using any of these three pragmata would make C<oct("1234")> return 1234
+(for any number not beginning with 0) anywhere in the program.  Now "1234"
+is translated from octal to decimal, whether within the pragma's scope or
+not.
 
 =item *
 
 
 =item *
 
-L<Compress::Zlib> has been upgraded from version 2.052 to 2.055.
-C<compress()>, C<uncompress()>, C<memGzip()> and C<memGunzip()> have been
-speeded up by making parameter validation more efficient.
+The global overrides that facilitate lexical use of C<hex> and C<oct> now
+respect any existing overrides that were in place before the new overrides
+were installed, falling back to them outside of the scope of C<use bignum>.
 
 =item *
 
 
 =item *
 
-L<Data::Dumper> has been upgraded from version 2.135_06 to 2.135_07.  It has
-been optimized to only build a seen-scalar hash as necessary, thereby speeding
-up serialization drastically.
-
-=item *
+C<use bignum "hex">, C<use bignum "oct"> and similar invocations for bigint
+and bigrat now export a C<hex> or C<oct> function, instead of providing a
+global override.
 
 
-L<Devel::Peek> has been upgraded from version 1.08 to 1.09.  The only change
-has been to the test script, to account for changes to some flags in perl's
-internals.
+=back
 
 =item *
 
 
 =item *
 
-L<Encode> has been upgraded from version 2.44 to 2.47.  The Mac alias x-mac-ce
-has been added, and various bugs have been fixed in Encode::Unicode,
-Encode::UTF7 and Encode::GSM0338.
+L<Carp> has been upgraded from version 1.26 to 1.27.  The C<longmess()> and
+C<shortmess()> functions are now documented.
 
 =item *
 
 
 =item *
 
-L<Module::Build> has been upgraded from version 0.40 to 0.4003.  A minor bug
-fix allows markup to be used around the leading "Name" in a POD "abstract"
-line, and some documentation improvements have been made.
+L<CPAN> has been upgraded from version 1.98 to 1.99_51.
 
 =item *
 
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 2.69 to 2.70.  Version
-information is now stored as a delta, which greatly reduces the size of the
-F<CoreList.pm> file.
+L<CPANPLUS> has been upgraded from version 0.9131 to 0.9133.
 
 =item *
 
 
 =item *
 
-L<Module::Load::Conditional> has been upgraded from version 0.50 to 0.54.
-Various enhancements include the new use of Module::Metadata.
+L<Data::Dumper> has been upgraded from version 2.135_07 to 2.136.  This promotes
+the previous development release to a stable release.
 
 =item *
 
 
 =item *
 
-L<Module::Metadata> has been upgraded from version 1.000009 to 1.000011.  The
-creation of a Module::Metadata object for a typical module file has been sped
-up by about 40%, and some spurious warnings about C<$VERSION>s have been
-suppressed.
+L<Digest::SHA> has been upgraded from version 5.71 to 5.72.
 
 =item *
 
 
 =item *
 
-L<Module::Pluggable> has been upgraded from version 4.0 to 4.3.  Amongst other
-changes, triggers are now allowed on events, which gives a powerful way to
-modify behaviour.
+L<ExtUtils::CBuilder> has been upgraded from version 0.280208 to 0.280209.  A
+list of symbols to export can now be passed to C<link()> when on Windows, as on
+other OSes [perl #115100].
 
 =item *
 
 
 =item *
 
-L<perlfaq> has been upgraded from version 5.0150040 to 5.0150041.  This
-contains a couple of minor corrections and lists one new editor.
+L<feature> has been upgraded from version 1.30 to 1.31.
 
 =item *
 
 
 =item *
 
-L<Pod::Simple> has been upgraded from version 3.20 to 3.23.  Numerous
-improvements have been made, mostly to Pod::Simple::XHTML, which also has a
-compatibility change: the C<codes_in_verbatim> option is now disabled by
-default.  See F<cpan/Pod-Simple/ChangeLog> for the full details.
+L<File::Glob> has been upgraded from version 1.17 to 1.18.  A
+space-separated list of patterns return long lists of results no longer
+results in memory corruption or crashes.  This bug was introduced in Perl
+5.16.0.  [perl #114984]
 
 =item *
 
 
 =item *
 
-L<re> has been upgraded from version 0.21 to 0.22.  Single character [class]es
-like C</[s]/> or C</[s]/i> are now optimized as if they did not have the
-brackets, i.e. C</s/> or C</s/i>.
+L<HTTP::Tiny> has been upgraded from version 0.022 to 0.024.  This improves
+SSL support.
 
 =item *
 
 
 =item *
 
-L<Socket> has been upgraded from version 2.002 to 2.004.  Constants and
-functions required for IP multicast source group membership have been added.
+L<Module::CoreList> has been upgraded from version 2.73 to 2.74.
 
 =item *
 
 
 =item *
 
-L<Storable> has been upgraded from version 2.37 to 2.38.  It can now freeze and
-thaw vstrings correctly.  This causes a slight incompatible change in the
-storage format, so the format version has increased to 2.9.
+L<PerlIO::encoding> has been upgraded from version 0.15 to 0.16.  This is
+the module implementing the ":encoding(...)" I/O layer.  It no longer
+corrupts memory or crashes when the encoding back-end reallocates the
+buffer or gives it a typeglob or shared hash key scalar.
 
 =item *
 
 
 =item *
 
-L<Sys::Syslog> has been upgraded from version 0.29 to 0.30.  An issue with
-C<POSIX::strftime()> on Windows and a build problem on Haiku-OS have been
-resolved, and <getservbyname()> is no longer called when the port is specified.
+L<threads::shared> has been upgraded from version 1.41 to 1.42.  This adds
+support for dual-valued values as created by
+L<Scalar::Util::dualvar|Scalar::Util/"dualvar NUM, STRING">.
 
 =item *
 
 
 =item *
 
-L<Term::ReadLine> has been upgraded from version 1.09 to 1.10.  This fixes the
-use of the B<cpan> and B<cpanp> shells on Windows in the event that the current
-drive happens to contain a F<\dev\tty> file.
+L<Unicode::Collate> hsa been upgraded from version 0.89 to 0.90.
 
 =item *
 
 
 =item *
 
-L<Text::Tabs> and L<Text::Wrap> have been upgraded from version 2009.0305 to
-2012.0818.  Support for Unicode combining characters has been added to them
-both.
+L<Unicode::Normalize> has been upgraded from version 1.14 to 1.15.
 
 =item *
 
 
 =item *
 
-L<Time::Local> has been upgraded from version 1.2000 to 1.2300.  Seconds values
-greater than 59 but less than 60 no longer cause C<timegm()> and C<timelocal()>
-to croak.
+L<warnings> has been upgraded from version 1.14 to 1.15.
 
 =item *
 
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.44 to 0.45.  This has been
-modified slightly for reasons of perl internal use only.
+L<Win32CORE> has been upgraded from version 0.03 to 0.04.
 
 
-=item *
+=back
 
 
-L<Win32> has been upgraded from version 0.44 to 0.45.  New APIs have been added
-for getting and setting the current code page.
+=head2 Removed Modules and Pragmata
+
+=over 4
 
 =item *
 
 
 =item *
 
-L<Win32CORE> has been upgraded from version 0.02 to 0.03.  The use of
-PERL_NO_GET_CONTEXT here has resulted in smaller machine code.
+XXX
 
 =back
 
 =head1 Documentation
 
 
 =back
 
 =head1 Documentation
 
-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>.
+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>.
 
 =head2 New Documentation
 
 
 =head2 New Documentation
 
@@ -301,26 +306,13 @@ 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.
 
 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
 section.
 
-=head3 L<perlfunc>, L<perlop>
-
-=over 4
-
-=item *
-
-Loop control verbs (C<dump>, C<goto>, C<next>, C<last> and C<redo>) have always
-had the same precedence as assignment operators, but this was not documented
-until now.
-
-=back
-
-=head3 L<perlvar>
+=head3 L<XXX>
 
 =over 4
 
 =item *
 
 
 =over 4
 
 =item *
 
-A caveat has been added to the documentation for C<$_> warning against the use
-of lexical C<$_> [perl #114020].
+XXX Description of the change here
 
 =back
 
 
 =back
 
@@ -344,21 +336,7 @@ and New Warnings
 
 =item *
 
 
 =item *
 
-L<Unterminated delimiter for here document|perldiag/"Unterminated delimiter for here document">
-
-This message now occurs when a here document label has an initial quotation
-mark but the final quotation mark is missing.
-
-This replaces a bogus and misleading error message about not finding the label
-itself [perl #114104].
-
-=item *
-
-L<panic: child pseudo-process was never scheduled|perldiag/"panic: child pseudo-process was never scheduled">
-
-This error is thrown when a child pseudo-process in the ithreads implementation
-on Windows was not scheduled within the time period allowed and therefore was
-not able to initialize properly [perl #88840].
+XXX L<message|perldiag/"message">
 
 =back
 
 
 =back
 
@@ -368,10 +346,7 @@ not able to initialize properly [perl #88840].
 
 =item *
 
 
 =item *
 
-L<Wide character in setenv|perldiag/"Wide character in %s">
-
-Attempts to put wide characters into environment variables via C<%ENV> now
-provoke this warning.
+XXX L<message|perldiag/"message">
 
 =back
 
 
 =back
 
@@ -383,7 +358,9 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
 
 =item *
 
-XXX Describe change here
+The error produced when a module cannot be loaded now includes a hint that
+the module may need to be installed: "Can't locate hopping.pm in @INC (you
+may need to install the hopping module) (@INC contains: ...)"
 
 =back
 
 
 =back
 
@@ -396,13 +373,13 @@ Most of these are built within the directories F<utils> and F<x2p>.
 entries for each change
 Use L<XXX> with program names to get proper documentation linking. ]
 
 entries for each change
 Use L<XXX> with program names to get proper documentation linking. ]
 
-=head3 L<XXX>
+=head3 L<h2xs>
 
 =over 4
 
 =item *
 
 
 =over 4
 
 =item *
 
-XXX
+F<h2xs> no longer produces invalid code for empty defines.  [perl #20636]
 
 =back
 
 
 =back
 
@@ -419,10 +396,7 @@ L</Platform Support> section, instead.
 
 =item *
 
 
 =item *
 
-The pager detection in F<Configure> has been improved to allow responses which
-specify options after the program name, e.g. B</usr/bin/less -R>, if the user
-accepts the default value.  This helps B<perldoc> when handling ANSI escapes
-[perl #72156].
+XXX
 
 =back
 
 
 =back
 
@@ -468,13 +442,13 @@ XXX
 
 =head2 Discontinued Platforms
 
 
 =head2 Discontinued Platforms
 
+XXX List any platforms that this version of perl no longer compiles on.
+
 =over 4
 
 =over 4
 
-=item UTS Global
+=item MPE/IX
 
 
-Support code relating to UTS global has been removed.  UTS was a mainframe
-version of System V created by Amdahl, subsequently sold to UTS Global.  The
-port has not been touched since before 5.8.0, and UTS Global is now defunct.
+Support for MPE/IX has been removed.
 
 =back
 
 
 =back
 
@@ -487,21 +461,9 @@ L</Modules and Pragmata> section.
 
 =over 4
 
 
 =over 4
 
-=item Windows
+=item Win32
 
 
-A new makefile option, USE_64_BIT_INT, has been added to the Windows makefiles.
-Set this to "define" when building a 32-bit perl if you want it to use 64-bit
-integers.
-
-Machine code size reductions, already made to the DLLs of XS modules in Perl
-5.17.2, have now been extended to the perl DLL itself.
-
-Building with VC++ 6.0 was inadvertently broken in Perl 5.17.2 but has now been
-fixed again.
-
-=item VMS
-
-The B<a2p> build has been fixed for the HP C++ compiler on OpenVMS.
+The option to build without USE_SOCKETS_AS_HANDLES has been removed.
 
 =back
 
 
 =back
 
@@ -517,7 +479,55 @@ well.
 
 =item *
 
 
 =item *
 
-XXX
+Case-insensitive matching inside a [bracketed] character class with a
+multi-character fold, no longer excludes one of the possibilities in the
+circumstances that it used to. [perl #89774].
+
+=item *
+
+C<PL_formfeed> has been removed.
+
+=item *
+
+The regular expression engine no longer reads one byte past the end of the
+target string.  While for all internally well-formed scalars this should
+never have been a problem, this change facilitates clever tricks with
+string buffers in CPAN modules.  [perl #73542]
+
+=item *
+
+Inside a BEGIN block, C<PL_compcv> now points to the currently-compiling
+subroutine, rather than the BEGIN block itself.
+
+=item *
+
+C<mg_length> has been deprecated.
+
+=item *
+
+C<sv_len> now always returns a byte count and C<sv_len_utf8> a character
+count.  Previously, C<sv_len> and C<sv_len_utf8> were both buggy and would
+sometimes returns bytes and sometimes characters.  C<sv_len_utf8> no longer
+assumes that its argument is in UTF8.  Neither of these creates UTF8 caches
+for tied or overloaded values or for non-PVs any more.
+
+=item *
+
+C<sv_mortalcopy> now copies string buffers of shared hash key scalars when
+called from XS modules [perl #79824].
+
+=item *
+
+C<RXf_SPLIT> and C<RXf_SKIPWHITE> are no longer used.  They are now
+#defined as 0.
+
+=item *
+
+The new C<RXf_MODIFIES_VARS> flag can be set by custom regular expression
+engines to indicate that the execution of the regular expression may cause
+variables to be modified.  This lets C<s///> know to skip certain
+optimisations.  Perl's own regular expression engine sets this flag for the
+special backtracking verbs that set $REGMARK and $REGERROR.
 
 =back
 
 
 =back
 
@@ -532,176 +542,178 @@ files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
 =item *
 
 
 =item *
 
-C<\w> now matches the code points U+200C (ZERO WIDTH NON-JOINER) and U+200D
-(ZERO WIDTH JOINER).  C<\W> no longer matches these.  This change is because
-Unicode corrected their definition of what C<\w> should match.
+A bug, case-insensitive regex with UTF8-flagged strings, introduced
+earlier in the 5.17 series has been fixed.  [perl #114982]
 
 =item *
 
 
 =item *
 
-C<dump LABEL> no longer leaks its label.
+Attributes applied to lexical variables no longer leak memory.
+[perl #114764]
 
 =item *
 
 
 =item *
 
-Constant folding no longer changes the behaviour of functions like C<stat()>
-and C<truncate()> that can take either filenames or handles.
-C<stat 1 ? foo : bar> nows treats its argument as a file name (since it is an
-arbitrary expression), rather than the handle "foo".
+C<dump>, C<goto>, C<last>, C<next>, C<redo> or C<require> followed by a
+bareword (or version) and then an infix operator is no longer a syntax
+error.  It used to be for those infix operators (like C<+>) that have a
+different meaning where a term is expected.  [perl #105924]
 
 =item *
 
 
 =item *
 
-C<truncate FOO, $len> no longer falls back to treating "FOO" as a file name if
-the filehandle has been deleted.  This was broken in Perl 5.16.0.
+C<require a::b . 1> and C<require a::b + 1> no longer produce erroneous
+ambiguity warnings.  [perl #107002]
 
 =item *
 
 
 =item *
 
-Subroutine redefinitions after sub-to-glob and glob-to-glob assignments no
-longer cause double frees or panic messages.
+Class method calls are now allowed on any string, and not just strings
+beginning with an alphanumeric character.  [perl #105922]
 
 =item *
 
 
 =item *
 
-C<s///> now turns vstrings into plain strings when performing a substitution,
-even if the resulting string is the same (C<s/a/a/>).
+An empty pattern created with C<qr//> used in C<m///> no longer triggers
+the "empty pattern reuses last pattern" behaviour.  [perl #96230]
 
 =item *
 
 
 =item *
 
-Prototype mismatch warnings no longer erroneously treat constant subs as having
-no prototype when they actually have "".
+Tying a hash during iteration no longer results in a memory leak.
 
 =item *
 
 
 =item *
 
-Constant subroutines and forward declarations no longer prevent prototype
-mismatch warnings from omitting the sub name.
+Freeing a tied hash during iteration no longer results in a memory leak.
 
 =item *
 
 
 =item *
 
-C<undef> on a subroutine now clears call checkers.
+List assignment to a tied array or hash that dies on STORE no longer
+results in a memory leak.
 
 =item *
 
 
 =item *
 
-The C<ref> operator started leaking memory on blessed objects in Perl 5.16.0.
-This has been fixed [perl #114340].
+If the hint hash (C<%^H>) is tied, compile-time scope entry (which copies
+the hint hash) no longer leaks memory if FETCH dies.  [perl #107000]
 
 =item *
 
 
 =item *
 
-C<use> no longer tries to parse its arguments as a statement, making
-C<use constant { () };> a syntax error [perl #114222].
+Constant folding no longer inappropriately triggers the special
+C<split " "> behaviour.  [perl #94490]
 
 =item *
 
 
 =item *
 
-On debugging builds, "uninitialized" warnings inside formats no longer cause
-assertion failures.
+C<defined scalar(@array)>, C<defined do { &foo }>, and similar constructs
+now treat the argument to C<defined> as a simple scalar.  [perl #97466]
 
 =item *
 
 
 =item *
 
-On debugging builds, subroutines nested inside formats no longer cause
-assertion failures [perl #78550].
+Running a custom debugging that defines no C<*DB::DB> glob or provides a
+subroutine stub for C<&DB::DB> no longer results in a crash, but an error
+instead.  [perl #114990]
 
 =item *
 
 
 =item *
 
-Formats and C<use> statements are now permitted inside formats.
+C<reset ""> now matches its documentation.  C<reset> only resets C<m?...?>
+patterns when called with no argument.  An empty string for an argument now
+does nothing.  (It used to be treated as no argument.)  [perl #97958]
 
 =item *
 
 
 =item *
 
-C<print $x> and C<sub { print $x }->()> now always produce the same output.  It
-was possible for the latter to refuse to close over $x if the variable was not
-active; e.g., if it was defined outside a currently-running named subroutine.
+C<printf> with an argument returning an empty list no longer reads past the
+end of the stack, resulting in erratic behaviour.  [perl #77094]
 
 =item *
 
 
 =item *
 
-Similarly, C<print $x> and C<print eval '$x'> now produce the same output.
-This also allows "my $x if 0" variables to be seen in the debugger [perl
-#114018].
+C<--subname> no longer produces erroneous ambiguity warnings.
+[perl #77240]
 
 =item *
 
 
 =item *
 
-Formats called recursively no longer stomp on their own lexical variables, but
-each recursive call has its own set of lexicals.
+C<v10> is now allowed as a label or package name.  This was inadvertently
+broken when v-strings were added in Perl 5.6.  [perl #56880]
 
 =item *
 
 
 =item *
 
-Attempting to free an active format or the handle associated with it no longer
-results in a crash.
+A regression introduced in 5.17.2 has been fixed, which made C</[\@\\]||/>
+result in a "panic" error.  [perl #115050]
 
 =item *
 
 
 =item *
 
-Format parsing no longer gets confused by braces, semicolons and low-precedence
-operators.  It used to be possible to use braces as format delimiters (instead
-of C<=> and C<.>), but only sometimes.  Semicolons and low-precedence operators
-in format argument lines no longer confuse the parser into ignoring the line's
-return value.  In format argument lines, braces can now be used for anonymous
-hashes, instead of being treated always as C<do> blocks.
+C<length>, C<pos>, C<substr> and C<sprintf> could be confused by ties,
+overloading, references and typeglobs if the stringification of such
+changed the internal representation to or from UTF8.  [perl #114410]
 
 =item *
 
 
 =item *
 
-Formats can now be nested inside code blocks in regular expressions and other
-quoted constructs (C</(?{...})/> and C<qq/${...}/>) [perl #114040].
+utf8::encode now calls FETCH and STORE on tied variables.  utf8::decode now
+calls STORE (it was already calling FETCH).
 
 =item *
 
 
 =item *
 
-Formats are no longer created after compilation errors.
+C<$tied =~ s/$non_utf8/$utf8/> no longer loops infinitely if the tied
+variable returns a Latin-1 string, shared hash key scalar, or reference or
+typeglob that stringifies as ASCII or Latin-1.  This is a regression from
+5.12.x.
 
 =item *
 
 
 =item *
 
-Some format syntax errors started causing crashes in Perl 5.17.2, but have now
-been fixed.
-
-=item *
+C<s///> without /e is now better at detecting when it needs to forego
+certain optimisations, fixing some buggy cases:
 
 
-Under debugging builds, the B<-DA> command line option started crashing in Perl
-5.16.0.  It has been fixed [perl #114368].
+=over
 
 =item *
 
 
 =item *
 
-Scope::Escape compatibility, which was broken in Perl 5.17.2, has been restored
-[perl #113872].
+Match variables in certain constructs (C<&&>, C<||>, C<..> and others) in
+the replacement part; e.g., C<s/(.)/$l{$a||$1}/g>.  [perl #26986]
 
 =item *
 
 
 =item *
 
-A potential deadlock scenario involving the premature termination of a
-pseudo-forked child in a Windows build with ithreads enabled has been fixed.
-This resolves the common problem of the F<t/op/fork.t> test hanging on Windows
-[perl #88840].
+Aliases to match variables in the replacement.
 
 =item *
 
 
 =item *
 
-The microperl build, broken since Perl 5.15.7, has now been restored.
+$REGERROR or $REGMARK in the replacement.  [perl #49190]
 
 =item *
 
 
 =item *
 
-The code which generates errors from C<require()> could potentially read one or
-two bytes before the start of the filename for filenames less than three bytes
-long and ending C</\.p?\z/>.  This has now been fixed.  Note that it could
-never have happened with module names given to C<use()> or C<require()> anyway.
+An empty pattern (C<s//$foo/>) that causes the last-successful pattern to
+be used, when that pattern contains code blocks that modify the variables
+in the replacement.
+
+=back
 
 =item *
 
 
 =item *
 
-The handling of pathnames of modules given to C<require()> has been made
-thread-safe on VMS.
+The taintedness of the replacement string no longer affects the taintedness
+of the return value of C<s///e>.
 
 =item *
 
 
 =item *
 
-The C<re_compile()> API function, the entry point for perl's regex compiler,
-was accidentally changed in Perl 5.17.1 to operate on the current engine.  This
-has now been restored to its former core-engine-specific state [perl #114302].
+The C<$|> autoflush variable is created on-the-fly when needed.  If this
+happened (e.g., if it was mentioned in a module or eval) when the
+currently-selected filehandle was a typeglob with an empty IO slot, it used
+to crash.  [perl #115206]
 
 =item *
 
 
 =item *
 
-Perl 5.17.1 introduced a memory leak into the re-use of run-time regexes where
-the pattern hasn't changed (i.e. C</$unchanging/>).  This has now been fixed.
+Line numbers at the end of a string eval are no longer off by one.
+[perl #114658]
 
 =item *
 
 
 =item *
 
-A bug in the compilation of a C</(?{})/> expression which affected the TryCatch
-test suite has been fixed [perl #114242].
+@INC filters (subroutines returned by subroutines in @INC) that set $_ to a
+copy-on-write scalar no longer cause the parser to modify that string
+buffer in place.
 
 =item *
 
 
 =item *
 
-Formats no longer leak.  They started leaking in 5.17.2.
+C<length($object)> no longer returns the undefined value if the object has
+string overloading that returns undef.  [perl #115260]
 
 =item *
 
 
 =item *
 
-Pod can now be nested in code inside a quoted construct outside of a string
-eval.  This used to work only within string evals [perl #114040].
+The use of C<PL_stashcache>, the stash name lookup cache for method calls, has
+been restored,
+
+Commit da6b625f78f5f133 in August 2011 inadvertently broke the code that looks
+up values in C<PL_stashcache>. As it's a only cache, quite correctly everything
+carried on working without it.
 
 =back
 
 
 =back
 
@@ -730,7 +742,7 @@ here.
 
 XXX Generate this with:
 
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.17.2..HEAD
+  perl Porting/acknowledgements.pl v5.17.4..HEAD
 
 =head1 Reporting Bugs
 
 
 =head1 Reporting Bugs