This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for bb4784f00 (Constant(undef))
[perl5.git] / pod / perldelta.pod
index ec532ed..e2adef7 100644 (file)
@@ -5,15 +5,15 @@
 [ 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.7
 
 =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.6 release and the 5.17.7
 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.5, first read
+L<perl5176delta>, which describes differences between 5.17.5 and 5.17.6.
 
 =head1 Notice
 
@@ -21,18 +21,11 @@ XXX Any important notices here
 
 =head1 Core Enhancements
 
-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.
+=head2 $&, $` and $' are no longer slow
 
-[ List each enhancement as a =head2 entry ]
-
-=head2 Computed Labels
-
-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.
+These three infamous variables have been redeemed and no longer slow down
+your program when used.  Hence, the /p regular expression flag now does
+nothing.
 
 =head1 Security
 
@@ -44,28 +37,26 @@ L</Selected Bug Fixes> section.
 
 =head1 Incompatible Changes
 
-[ List each incompatible change as a =head2 entry ]
+=head2 readline() with C<$/ = \N> now reads N characters, not N bytes
 
-=head2 C<$ENV{foo}=undef> deletes value from environ, like C<delete $ENV{foo}>
+Previously, when reading from a stream with I/O layers such as
+C<encoding>, the readline() function, otherwise known as the C<< <> >>
+operator, would read I<N> bytes from the top-most layer. [perl #79960]
 
-This facilitates use of C<local()> with C<%ENV> entries.  In previous versions
-of Perl, C<undef> was converted to the empty string.
+Now, I<N> characters are read instead.
 
-=head2 Defined values stored in environment are forced to byte strings
+There is no change in behaviour when reading from streams with no
+extra layers, since bytes map exactly to characters.
 
-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>).
+=head2 Lexical subroutine warnings have moved
 
-=head2 C<given> now aliases the global C<$_>
+The warning about the use of an experimental feature emitted when lexical
+subroutines (added in 5.17.4) are used now happens when the subroutine
+itself is declared, not when the "lexical_subs" feature is activated via
+C<use feature>.
 
-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].
+This stops C<use feature ':all'> from warning, but causes
+C<my sub foo; my sub bar> to warn twice.
 
 =head1 Deprecations
 
@@ -75,6 +66,77 @@ an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
+=head2 Lexical $_ is now deprecated
+
+Since it was introduced in Perl 5.10, it has caused much confusion with no
+obvious solution:
+
+=over
+
+=item *
+
+Various modules (e.g., List::Util) expect callback routines to use the
+global $_.  C<use List::Util 'first'; my $_; first { $_ == 1 } @list> does
+not work as one would expect.
+
+=item *
+
+A C<my $_> declaration earlier in the same file can cause confusing closure
+warnings.
+
+=item *
+
+The "_" subroutine prototype character allows called subroutines to access
+your lexical $_, so it is not really private after all.
+
+=item *
+
+Nevertheless, subroutines with a "(@)" prototype and methods cannot access
+the caller's lexical $_, unless they are written in XS.
+
+=item *
+
+But even XS routines cannot access a lexical $_ declared, not in the
+calling subroutine, but in an outer scope, iff that subroutine happened not
+to mention $_ or use any operators that default to $_.
+
+=back
+
+=head2 Various XS-callable functions are now deprecated
+
+The following functions will be removed from a future version of Perl,
+and should not be used.  With participating C compilers (e.g., gcc),
+compiling any file that uses any of these will generate a warning.
+These were not intended for public use; there are equivalent, faster,
+macros for most of them.  See L<perlapi/Character classes>:
+C<is_uni_ascii>,
+C<is_uni_ascii_lc>,
+C<is_uni_blank>,
+C<is_uni_blank_lc>,
+C<is_uni_cntrl>,
+C<is_uni_cntrl_lc>,
+C<is_uni_idfirst_lc>,
+C<is_uni_space>,
+C<is_uni_space_lc>,
+C<is_uni_xdigit>,
+C<is_uni_xdigit_lc>,
+C<is_utf8_ascii>,
+C<is_utf8_blank>,
+C<is_utf8_cntrl>,
+C<is_utf8_idcont>,
+C<is_utf8_idfirst>,
+C<is_utf8_perl_space>,
+C<is_utf8_perl_word>,
+C<is_utf8_posix_digit>,
+C<is_utf8_space>,
+C<is_utf8_xdigit>.
+C<is_utf8_xidcont>,
+C<is_utf8_xidfirst>,
+C<to_uni_lower_lc>,
+C<to_uni_title_lc>,
+and
+C<to_uni_upper_lc>.
+
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here.
@@ -86,7 +148,11 @@ There may well be none in a stable release.
 
 =item *
 
-XXX
+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.
 
 =back
 
@@ -118,161 +184,30 @@ XXX
 
 =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.
-
-=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.
-
-=item *
-
-L<B::Debug> has been upgraded from version 1.17 to 1.18.  This adds support
-(experimentally) for the new C<B::PADLIST>.
-
-=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.
-
-=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.
-
-=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.
-
-=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.
-
-=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.
-
-=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 *
-
-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.
-
-=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.
-
-=item *
-
-L<Module::Build> has been upgraded from version 0.40 to 0.4002.  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.
-
-=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.
-
-=item *
-
-L<Module::Load::Conditional> has been upgraded from version 0.50 to 0.54.
-Various enhancements include the new use of Module::Metadata.
-
-=item *
-
-L<Module::Metadata> has been upgraded from version 1.000009 to 1.000010.  The
-creation of a Module::Metadata object for a typical module file has been sped
-up by about 40%.
-
-=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.
-
-=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.
-
-=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.
-
-=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>.
-
-=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<GDBM_File> has been upgraded from version 1.14 to 1.15. The undocumented
+optional fifth parameter to C<TIEHASH> has been removed. This was intended
+to provide control of the callback used by C<gdbm*> functions in case of
+fatal errors (such as filesystem problems), but did not work (and could
+never have worked). No code on CPAN even attempted to use it. The callback
+is now always the previous default, C<croak>. Problems on some platforms with
+how the C<C> C<croak> function is called have also been resolved.
 
-=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.
-
-=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.
-
-=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.
-
-=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.
+=back
 
-=item *
+=head2 Removed Modules and Pragmata
 
-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.
+=over 4
 
 =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
 
-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
 
@@ -288,26 +223,16 @@ 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<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<perlapi/Character classes>
 
 =over 4
 
 =item *
 
-A caveat has been added to the documentation for C<$_> warning against the use
-of lexical C<$_> [perl #114020].
+There are quite a few macros callable from XS modules that classify
+characters into things like alphabetic, punctuation, etc.  More of these
+are now documented, including ones which work on characters whose code
+points are outside the Latin-1 range.
 
 =back
 
@@ -331,21 +256,7 @@ and New Warnings
 
 =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
 
@@ -355,10 +266,7 @@ not able to initialize properly [perl #88840].
 
 =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
 
@@ -370,7 +278,11 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+L<Constant(%s): Call to &{$^H{%s}} did not return a defined value|perldiag/Constant(%s): Call to &{$^H{%s}} did not return a defined value>
+
+Constant overloading that returns C<undef> results in this error message.
+For numeric constants, it used to say "Constant(undef)".  "undef" has been
+replaced with the number itself. 
 
 =back
 
@@ -406,10 +318,7 @@ L</Platform Support> section, instead.
 
 =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
 
@@ -457,11 +366,9 @@ XXX
 
 =over 4
 
-=item UTS Global
+=item BeOS
 
-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 BeOS has been removed.
 
 =back
 
@@ -474,21 +381,9 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item Windows
-
-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
+=item XXX-some-platform
 
-The B<a2p> build has been fixed for the HP C++ compiler on OpenVMS.
+XXX
 
 =back
 
@@ -504,182 +399,146 @@ well.
 
 =item *
 
-XXX
-
-=back
-
-=head1 Selected Bug Fixes
-
-XXX Important bug fixes in the core language are summarized here.  Bug fixes in
-files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
-
-[ List each fix as a =item entry ]
-
-=over 4
-
-=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.
-
-=item *
-
-C<dump LABEL> no longer leaks its label.
-
-=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".
-
-=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.
-
-=item *
-
-Subroutine redefinitions after sub-to-glob and glob-to-glob assignments no
-longer cause double frees or panic messages.
+SvUPGRADE() is no longer an expression. Originally this macro (and its
+underlying function, sv_upgrade()) were documented as boolean, although
+in reality they always croaked on error and never returned false. In 2005
+the documentation was updated to specify a void return value, but
+SvUPGRADE() was left always returning 1 for backwards compatibility. This
+has now been removed, and SvUPGRADE() is now a statement with no return
+value.
 
-=item *
+So this is now a syntax error:
 
-C<s///> now turns vstrings into plain strings when performing a substitution,
-even if the resulting string is the same (C<s/a/a/>).
+    if (!SvUPGRADE(sv)) { croak(...); }
 
-=item *
+If you have code like that, simply replace it with
 
-Prototype mismatch warnings no longer erroneously treat constant subs as having
-no prototype when they actually have "".
+    SvUPGRADE(sv);
 
-=item *
+or to to avoid compiler warnings with older perls, possibly
 
-Constant subroutines and forward declarations no longer prevent prototype
-mismatch warnings from omitting the sub name.
+    (void)SvUPGRADE(sv);
 
 =item *
 
-C<undef> on a subroutine now clears call checkers.
+Perl has a new copy-on-write mechanism that allows any SvPOK scalar to be
+upgraded to a copy-on-write scalar.  A reference count on the string buffer
+is stored in the string buffer itself.
 
-=item *
+This breaks a few XS modules by allowing copy-on-write scalars to go
+through code paths that never encountered them before.
 
-The C<ref> operator started leaking memory on blessed objects in Perl 5.16.0.
-This has been fixed [perl #114340].
+This behaviour can still be disabled by running F<Configure> with
+B<-Accflags=-DPERL_NO_COW>.  This option will probably be removed in Perl
+5.20.
 
 =item *
 
-C<use> no longer tries to parse its arguments as a statement, making
-C<use constant { () };> a syntax error [perl #114222].
-
-=item *
+Copy-on-write no longer uses the SvFAKE and SvREADONLY flags.  Hence,
+SvREADONLY indicates a true read-only SV.
 
-On debugging builds, "uninitialized" warnings inside formats no longer cause
-assertion failures.
+Use the SvIsCOW macro (as before) to identify a copy-on-write scalar.
 
 =item *
 
-On debugging builds, subroutines nested inside formats no longer cause
-assertion failures [perl #78550].
+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.
 
-=item *
+The previous behaviour can still be enabled by running F<Configure> with
+B<-Accflags=-DPERL_SAWAMPERSAND>.
 
-Formats and C<use> statements are now permitted inside formats.
+=back
 
-=item *
+=head1 Selected Bug Fixes
 
-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.
+XXX Important bug fixes in the core language are summarized here.  Bug fixes in
+files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>.
 
-=item *
+[ List each fix as a =item entry ]
 
-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].
+=over 4
 
 =item *
 
-Formats called recursively no longer stomp on their own lexical variables, but
-each recursive call has its own set of lexicals.
+C<sort {undef} ...> under fatal warnings no longer crashes.  It started
+crashing in Perl 5.16.
 
 =item *
 
-Attempting to free an active format or the handle associated with it no longer
-results in a crash.
+Stashes blessed into each other
+(C<bless \%Foo::, 'Bar'; bless \%Bar::, 'Foo'>) no longer result in double
+frees.  This bug started happening in Perl 5.16.
 
 =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.
+Numerous memory leaks have been fixed, mostly involving fatal warnings and
+syntax errors.
 
 =item *
 
-Formats can now be nested inside code blocks in regular expressions and other
-quoted constructs (C</(?{...})/> and C<qq/${...}/>) [perl #114040].
+Lexical constants (C<my sub answer () { 42 }>) no longer cause double
+frees.
 
 =item *
 
-Formats are no longer created after compilation errors.
+Constant subroutine redefinition warns by default, but lexical constants
+were accidentally exempt from default warnings.  This has been corrected.
 
 =item *
 
-Some format syntax errors started causing crashes in Perl 5.17.2, but have now
-been fixed.
+Some failed regular expression matches such as C<'f' =~ /../g> were not
+resetting C<pos>.  Also, "match-once" patterns (C<m?...?g>) failed to reset
+it, too, when invoked a second time [perl #23180].
 
 =item *
 
-Under debugging builds, the B<-DA> command line option started crashing in Perl
-5.16.0.  It has been fixed [perl #114368].
+Accessing C<$&> after a pattern match now works if it had not been seen
+before the match.  I.e., this applies to C<${'&'}> (under C<no strict>) and
+C<eval '$&'>.  The same applies to C<$'> and C<$`> [perl #4289].
 
 =item *
 
-Scope::Escape compatibility, which was broken in Perl 5.17.2, has been restored
-[perl #113872].
+Several bugs involving C<local *ISA> and C<local *Foo::> causing stale
+MRO caches have been fixed.  
 
 =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].
+Defining a subroutine when its typeglob has been aliased no longer results
+in stale method caches.  This bug was introduced in Perl 5.10.
 
 =item *
 
-The microperl build, broken since Perl 5.15.7, has now been restored.
+Localising a typeglob containing a subroutine when the typeglob's package
+has been deleted from its parent stash no longer produces an error.  This
+bug was introduced in Perl 5.14.
 
 =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.
+Under some circumstances, C<local *method=...> would fail to reset method
+caches upon scope exit.
 
 =item *
 
-The handling of pathnames of modules given to C<require()> has been made
-thread-safe on VMS.
+C</[.foo.]/> is no longer an error, but produces a warning (as before) and
+is treated as C</[.fo]/> [perl #115818].
 
 =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].
+C<goto $tied_var> now calls FETCH before deciding what type of goto
+(subroutine or label) this is.
 
 =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.
+Renaming packages through glob assignment
+(C<*Foo:: = *Bar::; *Bar:: = *Baz::>) in combination with C<m?...?> and
+C<reset> no longer makes threaded builds crash.
 
 =item *
 
-A bug in the compilation of a C</(?{})/> expression which affected the TryCatch
-test suite has been fixed [perl #114242].
+An earlier release in the 5.17.x series could crash if user code prevented
+_charnames from loading via C<$INC{'_charnames.pm'}++>.
 
 =back
 
@@ -708,7 +567,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.17.2..HEAD
+  perl Porting/acknowledgements.pl v5.17.6..HEAD
 
 =head1 Reporting Bugs