This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Add ticket number to bug fix
[perl5.git] / pod / perldelta.pod
index b50f817..b02a575 100644 (file)
@@ -1,16 +1,13 @@
 =encoding utf8
 
 =for comment
-This has been completed up to 9ac8a16, except for:
+This has been completed up to 1a50d74bac4, except for:
 8629c11317 smueller Escape double-quotes in generated #line directives
 8dc67a69b  shlomif  perl -d: display lines inside subroutines.
 3dfd1b5cd2 leont    Export PerlIOBase_open
 
 =head1 NAME
 
-[ this is a template for a new perldelta file. Any text flagged as
-XXX needs to be processed before release. ]
-
 perldelta - what is new for perl v5.15.7
 
 =head1 DESCRIPTION
@@ -28,18 +25,32 @@ XXX Any important notices here
 
 =head1 Core Enhancements
 
-XXX New core language features go here. Summarise user-visible core language
-enhancements. Particularly prominent performance optimisations could go
-here, but most should go in the L</Performance Enhancements> section.
-
-[ List each enhancement as a =head2 entry ]
-
 =head2 C<use charnames> no longer needed for C<\N{I<name>}>
 
 The C<charnames> module is now automatically loaded when needed as if
 the C<:full> and C<:short> options had been specified.  See
 L<charnames>.
 
+=head2 Improved performance for Unicode properties in regular expressions
+
+Matching a code point against a Unicode property is now done via a
+binary search instead of linear.  This means for example that the worst
+case for a 1000 item property is 10 probes instead of 1000.  This
+inefficiency has been compensated for in the past by permanently storing
+in a hash the results of a given probe plus the results for the adjacent
+64 code points, under the theory that near-by code points are likely to
+be searched for.  A separate hash was used for each mention of a Unicode
+property in each regular expression.  Thus, C<qr/\p{foo}abc\p{foo}/>
+would generate two hashes.  Any probes in one instance would be unknown
+to the other, and the hashes could expand separately to be quite large
+if the regular expression were used on many different widely-separated
+code points.  This can lead to running out of memory in extreme cases.
+Now, however, there is just one hash shared by all instances of a given
+property.  This means that if C<\p{foo}> is matched against "A" in one
+regular expression in a thread, the result will be known immediately to
+all regular expressions, and the relentless march of using up memory is
+slowed considerably.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -60,12 +71,6 @@ XXX For a release on a stable branch, this section aspires to be:
 
 =head1 Deprecations
 
-XXX Any deprecated features, syntax, modules etc. should be listed here.
-In particular, deprecated modules should be listed here even if they are
-listed as an updated module in the L</Modules and Pragmata> section.
-
-[ List each deprecation as a =head2 entry ]
-
 =head2 Deprecated Modules
 
 =over
@@ -80,11 +85,6 @@ in v5.17.0.
 
 =head1 Performance Enhancements
 
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
-
-[ List each enhancement as a =item entry ]
-
 =over 4
 
 =item *
@@ -92,6 +92,11 @@ may well be none in a stable release.
 Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now
 faster, as they enable features without loading F<feature.pm>.
 
+=item *
+
+C<local $_> is faster now, as it no longer iterates through magic that it
+is not going to copy anyway.
+
 =back
 
 =head1 Modules and Pragmata
@@ -106,16 +111,6 @@ cribbed.
 
 [ Within each section, list entries as a =item entry ]
 
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item *
-
-XXX
-
-=back
-
 =head2 Updated Modules and Pragmata
 
 =over 4
@@ -148,7 +143,7 @@ The C</applaud> regular expression flags are no longer omitted.
 Feature hints are now deparsed with C<use feature> rather than C<%^H>
 assignments.
 
-A regression in 1.10 that caused C<ambient_pragmas> to disabled strict mode
+A regression in 1.10 that caused C<ambient_pragmas> to disable strict mode
 in obscure cases has been fixed.
 
 Strict mode is now fully deparsed, including subs and vars [perl #24027].
@@ -156,6 +151,9 @@ Strict mode is now fully deparsed, including subs and vars [perl #24027].
 The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces
 (i.e., C<${(}>) in regular expressions [perl #86060].
 
+C<continue> blocks after C<for> loops are now deparsed correctly, as they
+were back in 0.67 (included with Perl 5.8.5) [perl #108224]
+
 =item *
 
 L<CGI> has been upgraded from version 3.58 to version 3.59.
@@ -173,16 +171,7 @@ Version::Requirements has now been merged as CPAN::Meta::Requirements.
 
 =item *
 
-L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9115.
-
-=item *
-
-L<POSIX> has been upgraded from version 1.28 to version 1.29.
-C<POSIX::sleep> is now a direct call into the underlying OS C<sleep>
-function, instead of being a Perl wrapper on C<CORE::sleep>. C<POSIX::dup2>
-now returns the correct value on Win32 (I<i.e.> the file descriptor).
-C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and C<POSIX::pause> now
-dispatch safe signals immediately before returning to their caller.
+L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9116.
 
 =item *
 
@@ -203,17 +192,74 @@ and the same.
 
 =item *
 
+L<ExtUtils::Packlist> has been upgraded from version 1.45 to version 1.46.
+
+It no longer produces "used once" warnings when the C<read> and C<write>
+methods are called while the main program is still compiling (e.g., from
+within a BEGIN block) [perl #107410] [rt.cpan.org #50315].
+
+=item *
+
+L<Locale::Maketext> has been upgraded from version 1.21 to version 1.22.
+
+=item *
+
 L<Module::Pluggable> has been upgraded from version 3.9 to version 4.0.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.27 to version 1.28.
+L<overload> has been upgraded from version 1.16 to version 1.17.
+
+C<overload::Overloaded> no longer calls C<can> on the class, but uses
+another means to determine whether the object has overloading.  It was
+never correct for it to call C<can>, as overloading does not respect
+AUTOLOAD.  So classes that autoload methods and implement C<can> no longer
+have to account for overloading [perl #40333].
+
+A warning is now produced for invalid arguments.  See L</New Diagnostics>.
+
+=item *
+
+L<perlfaq> has been upgraded from version 5.0150036 to version 5.0150038.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.12 to version 0.13.
+
+(This is the module that implements C<< open $fh, '>', \$scalar >>.)
+
+It no longer assumes during C<seek> that $scalar is a string internally.
+If it didn't crash, it was close to doing so [perl #92706].
+
+Printing to an in-memory handle now works if the $scalar holds a reference,
+stringifying the reference before modifying it.  References used to be
+treated as empty strings.
+
+Printing to an in-memory handle no longer crashes if the $scalar happens to
+hold a number internally, but no string buffer.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.12 to 1.13
+
+=item *
+
+L<POSIX> has been upgraded from version 1.27 to version 1.29.
 
 C<sigsuspend> and C<pause> now run signals handle before returning, as the
 whole point of these two functions is to wait until a signal has
 arrived, and then return I<after> it has been triggered.  Delayed, or
 "safe", signals were preventing that from happening, possibly resulting in
 race conditions [perl #107216].
+C<POSIX::sleep> is now a direct call into the underlying OS C<sleep>
+function, instead of being a Perl wrapper on C<CORE::sleep>. C<POSIX::dup2>
+now returns the correct value on Win32 (I<i.e.> the file descriptor).
+C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and C<POSIX::pause> now
+dispatch safe signals immediately before returning to their caller.
+
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.15_01 to version 3.15_15.
 
 =item *
 
@@ -241,42 +287,41 @@ which is a drop-in replacement.
 
 =back
 
-=head2 Removed Modules and Pragmata
-
-=over 4
-
-=item *
+=head1 Documentation
 
-XXX
+=head2 Changes to Existing Documentation
 
-=back
+=head3 L<perlfunc>
 
-=head1 Documentation
+=over 4
 
-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>.
+=item *
 
-=head2 New Documentation
+C<dbmopen> treats a 0 mode as a special case, that prevents a nonexistent
+file from being created.  This has been the case since Perl 5.000, but was
+never documented anywhere.  Now the perlfunc entry mentions it
+[perl #90064].
 
-XXX Changes which create B<new> files in F<pod/> go here.
+=item *
 
-=head3 L<XXX>
+The entry for C<split> has been rewritten.  It is now far clearer than
+before.
 
-XXX Description of the purpose of the new file here
+=back
 
-=head2 Changes to Existing Documentation
+=head3 L<perlop> and L<perlsyn>
 
-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.
+=over 4
 
-=head3 L<XXX>
+=item *
 
-=over 4
+Documentation of the smartmatch operator has been reworked and moved from
+perlsyn to perlop where it belongs.
 
 =item *
 
-XXX Description of the change here
+Documentation of the ellipsis statement (C<...>) has been reworked and
+moved from perlop to perlsyn.
 
 =back
 
@@ -286,21 +331,8 @@ 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>.
 
-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.
-
-[ Within each section, list entries as a =item entry that links to perldiag,
-  e.g.
-
-  =item *
-
-  L<Invalid version object|perldiag/"Invalid version object">
-]
-
 =head2 New Diagnostics
 
-XXX Newly added diagnostic messages go here
-
 =head3 New Errors
 
 =over 4
@@ -327,30 +359,45 @@ tying a special array like C<@_>.  You should never see this message.
 
 =item *
 
-XXX L<message|perldiag/"message">
+L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated">
 
-=back
+The long-deprecated C<defined(@array)> now also warns for package variables.
+Previously it only issued a warning for lexical variables.
 
-=head2 Changes to Existing Diagnostics
+=item *
 
-XXX Changes (i.e. rewording) of diagnostic messages go here
+L<Useless use of \E|perldiag/"Useless use of \E">
 
-=over 4
+C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>.
 
 =item *
 
-XXX Describe change here
+L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid">
+
+This warning, in the "overload" category, is produced when the overload
+pragma is given an argument it doesn't recognize, presumably a mistyped
+operator.
 
 =back
 
-=head1 Utility Changes
+=head2 Removals
 
-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>.
+=over 4
+
+=item *
+
+"sort is now a reserved word"
+
+This error used to occur when C<sort> was called without arguments, followed by C<;> or C<)>.  (E.g., C<sort;> would die, but C<{sort}> was
+OK.)  This error message was added in Perl 3 to catch code like
+C<close(sort)> which would no longer work.  More than two decades later,
+this message is no longer appropriate.  Now C<sort> without arguments is
+always allowed, and returns an empty list, as it did in those cases where
+it was already allowed [perl #90030].
+
+=back
 
-[ 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. ]
+=head1 Utility Changes
 
 =head3 L<splain>
 
@@ -378,7 +425,7 @@ has become this:
 
 =item *
 
-Some error message consist of multiple lines that are listed as separate
+Some error messages consist of multiple lines that are listed as separate
 entries in L<perldiag>.  splain has been taught to find the separate
 entries in these cases, instead of simply failing to find the message.
 
@@ -386,13 +433,6 @@ entries in these cases, instead of simply failing to find the message.
 
 =head1 Configuration and Compilation
 
-XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
-go here.  Any other changes to the Perl build process should be listed here.
-However, any platform-specific changes should be listed in the
-L</Platform Support> section, instead.
-
-[ List changes as a =item entry ].
-
 =over 4
 
 =item *
@@ -407,14 +447,6 @@ Pods.
 
 =head1 Testing
 
-XXX Any significant changes to the testing of a freshly built perl should be
-listed here.  Changes which create B<new> files in F<t/> go here as do any
-large changes to the testing harness (e.g. when parallel testing was added).
-Changes to existing files in F<t/> aren't worth summarising, although the bugs
-that they represent may be covered elsewhere.
-
-[ List each test improvement as a =item entry ]
-
 =over 4
 
 =item *
@@ -427,63 +459,8 @@ C<make install>, are tested here.
 
 =back
 
-=head1 Platform Support
-
-XXX Any changes to platform support should be listed in the sections below.
-
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
-
-=head2 New Platforms
-
-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.
-
-=over 4
-
-=item XXX-some-platform
-
-XXX
-
-=back
-
-=head2 Discontinued Platforms
-
-XXX List any platforms that this version of perl no longer compiles on.
-
-=over 4
-
-=item XXX-some-platform
-
-XXX
-
-=back
-
-=head2 Platform-Specific Notes
-
-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.
-
-=over 4
-
-=item XXX-some-platform
-
-XXX
-
-=back
-
 =head1 Internal Changes
 
-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 *
@@ -513,12 +490,6 @@ is reified first, to make sure this is always the case.
 
 =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>.
-
-[ List each fix as a =item entry ]
-
 =over 4
 
 =item * "b . COND" in the debugger has been fixed
@@ -568,8 +539,8 @@ message.
 
 When one writes C<open foo || die>, which used to work in Perl 4, a
 "Precedence problem" warning is produced.  This warning used erroneously to
-apply to fully-qualified bareword handle names as well.  This has been
-corrected.
+apply to fully-qualified bareword handle names not followed by C<||>.  This
+has been corrected.
 
 =item * C<select> and package aliasing
 
@@ -637,7 +608,7 @@ more.
 =item * Unrecognised switches on C<#!> line
 
 If a switch, such as B<-x>, that cannot occur on the C<#!> line is used
-there, perl dies with "Cant emulate...".
+there, perl dies with "Can't emulate...".
 
 It used to produce the same message for switches that perl did not
 recognise at all, whether on the command line or the C<#!> line.
@@ -658,7 +629,7 @@ Now it always updates those caches.
 =item * Hash element deletion and destructors
 
 When hash elements are deleted in void context, the internal hash entry is
-now freed before the value is freed, to prevent destructors call by that
+now freed before the value is freed, to prevent destructors called by that
 latter freeing from seeing the hash in an inconsistent state.  It was
 possible to cause double-frees if the destructor freed the hash itself
 [perl #100340].
@@ -678,37 +649,231 @@ Typeglobs returned from threads are no longer cloned if the parent thread
 already has a glob with the same name.  This means that returned
 subroutines will now assign to the right package variables [perl #107366].
 
-=back
+=item * C<local $_>
 
-=head1 Known Problems
+In Perl 5.14, C<local $_> was changed to create a new variable not tied to
+anything, even if $_ was tied before that.  But, due to an oversight, it
+would still call FETCH once on a tied $_ before replacing it with the new
+variable.  This has been fixed [perl #105912].
 
-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 * Returning tied variables
 
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+When returning a value from a non-lvalue subroutine, Perl copies the value.
+Sometimes it cheats for the sake of speed, and does not copy the value if
+it makes no observable difference.  This optimisation was erroneously
+allowing the copy to be skipped on tied variables, causing a difference in
+behaviour depending on the tied variable's reference count.  This has been
+fixed [perl #95548].
 
-[ List each fix as a =item entry ]
+=item * C<{@a = sort}> no longer crashes
 
-=over 4
+This particular piece of code (C<sort> with no arguments assigned to an
+array, inside a block with no C<;>) started crashing in an earlier 5.15.x
+release.  It has been fixed.
+
+=item * C<utf8::decode> and read-only scalars
+
+C<utf8::decode> now refuses to modify read-only scalars [perl #91850].
+
+=item * C<dbmopen> with undefined mode
+
+C<dbmopen> now only warns once, rather than three times, if the mode
+argument is C<undef> [perl #90064].
+
+=item * Freeing an aggregate during list assignment
+
+If list assignment to a hash or array triggered destructors that freed the
+hash or array itself, a crash would ensue.  This is no longer the case
+[perl #107440].
+
+=item * Confused internal bookkeeping with @ISA arrays
+
+Creating a weak reference to an @ISA array or accessing the array index
+(C<$#ISA>) could result in confused internal bookkeeping for elements
+subsequently added to the @ISA array.  For instance, creating a weak
+reference to the element itself could push that weak reference on to @ISA;
+and elements added after use of C<$#ISA> would be ignored by method lookup
+[perl #85670].
+
+=item * DELETE on scalar ties
+
+Tying an element of %ENV or C<%^H> and then deleting that element would
+result in a call to the tie object's DELETE method, even though tying the
+element itself is supposed to be equivalent to tying a scalar (the element
+is, of course, a scalar) [perl #67490].
+
+=item * Freeing $_ inside C<grep> or C<map>
+
+Freeing $_ inside a C<grep> or C<map> block or a code block embedded in a
+regular expression used to result in double frees [perl #92254, #92256].
+
+=item * Warnings with C<+=>
+
+The C<+=> operator does not usually warn when the left-hand side is
+C<undef>, but it was doing so for tied variables.  This has been fixed
+[perl #44895].
+
+=item * Tying and autovivification
+
+When Perl autovivifies an element of a tied array or hash (which entails
+calling STORE with a new reference), it now calls FETCH immediately after
+the STORE, instead of assuming that FETCH would have returned the same
+reference.  This can make it easier to implement tied objects [perl #35865, #43011].
+
+=item * C<@&> and C<$&>
+
+Mentioning a variable named "&" other than C<$&> (i.e., C<@&> or C<%&>) no
+longer stops C<$&> from working.  The same applies to variables named "'"
+and "`" [perl #24237].
+
+=item * Stacked filetests
+
+C<-T> and C<-B> now work when stacked up with other filetest operators
+[perl #77388].
+
+=item * Filetests and stat buffers
+
+Perl keeps several internal variables to keep track of the last stat
+buffer, from which file(handle) it originated, what type it was, and
+whether the last stat succeeded.
+
+There were various cases where these could get out of synch, resulting in
+inconsistent or erratic behaviour in edge cases (every mention of C<-T>
+applies to C<-B> as well):
+
+=over
+
+=item *
+
+C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last
+stat type, so an C<lstat _> following it would merrily return the wrong
+results.  Also, it was not setting the success status.
 
 =item *
 
-XXX
+Freeing the handle last used by C<stat> or a filetest could result in
+S<C<-T _>> using an unrelated handle.
+
+=item *
+
+C<stat> with an IO reference (as returned by C<*STDIO{IO}>, for instance)
+would not reset the stat type.
+
+=item *
+
+C<stat> with an IO reference was not recording the filehandle for
+S<C<-T _>> to use.
+
+=item *
+
+The presence of fatal warnings could cause the stat buffer not to be reset
+for a filetest operator on an unopened filehandle or C<-l> on any handle.
+
+=item *
+
+Fatal warnings would stop C<-T> from setting C<$!>.
+
+=item *
+
+When the last stat was on an unreadable file, C<-T _> is supposed to
+return C<undef>, leaving the last stat buffer unchanged.  But it was
+setting the stat type, causing C<lstat _> to stop working.
+
+=item *
+
+C<-T I<FILENAME>> was not resetting the internal stat buffers for
+unreadable files.
 
 =back
 
-=head1 Obituary
+These have all been fixed.
+
+=item * C<defined *{"!"}>
+
+An earlier 5.15.x release caused this construct to stop the C<%!> hash
+from working.  Likewise C<defined *{"+"}> and C<defined *{"-"}> caused
+C<%+> and C<%->, respectively, to stop working.  This has been fixed.
+
+=item * C<-T _> with no preceding C<stat>
+
+This used to produce a confusing "uninitialized" warning, even though there
+is no visible uninitialized value to speak of.
+
+=item * C<stat I<HANDLE>> and fstat failures
+
+If the operating system's C<fstat> function failed, C<stat> would warn
+about an unopened handle, even though that was not the case.  This has been
+fixed.
+
+=item * C<lstat I<IOREF>>
+
+C<lstat> is documented to fall back to C<stat> (with a warning) when given
+a filehandle.  When passed an IO reference, it was actually doing the
+equivalent of S<C<stat _>> and ignoring the handle.
 
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+=item * Crashes with warnings
+
+Two warning messages that mention variable names started crashing in
+5.15.5, but have been fixed [perl #106726, #107656].
+
+=item * Bitwise assignment operators and copy-on-write
+
+In 5.14.0, the bitwise assignment operators C<|=>, C<^=> and C<&=> starting
+leaving the left-hand side undefined if it happened to be a copy-on-write
+string.  This has been fixed [perl #108480].
+
+=item * Three problematic Unicode characters now work better in regex pattern matching under C</i>
+
+In the past, three Unicode characters:
+LATIN SMALL LETTER SHARP S,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+and
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+along with the sequences that they fold to
+(including "ss" in the case of LATIN SMALL LETTER SHARP S),
+did not properly match under C</i>.  5.14.0 fixed some of these cases,
+but introduced others, including a panic when one of the characters or
+sequences was used in the C<(?(DEFINE)> regular expression predicate.
+The known bugs that were introduced in 5.14 have now been fixed; as well
+as some other edge cases that have never worked until now.  All these
+involve using the characters and sequences outside bracketed character
+classes under C</i>.  This closes [perl #98546].
+
+There remain known problems when using certain characters with
+multi-character folds inside bracketed character classes, including such
+constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>.  These
+remaining bugs are addressed in [perl #89774].
+
+=back
 
 =head1 Acknowledgements
 
-XXX Generate this with:
+Perl 5.15.7 represents approximately 4 weeks of development since Perl 5.15.6
+and contains approximately 50,000 lines of changes across 470 files from 28
+authors.
+
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.15.7:
+
+Alberto Simões, Brian Fraser, Chris 'BinGOs' Williams, Craig A. Berry, Dave
+Rolsky, David Mitchell, Eric Brine, Father Chrysostomos, Florian Ragwitz,
+H.Merijn Brand, Hojung Youn, James E Keenan, Joel Berger, Joshua ben Jore, Karl
+Williamson, Leon Timmermans, Matthew Horsfall, Michael Witten, Nicholas Clark,
+Ricardo Signes, Shlomi Fish, Steffen Müller, Steffen Schwigon, Todd Rinaldo,
+Tom Christiansen, Tom Hukins, Tony Cook, Ævar Arnfjörð Bjarmason.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
 
-  perl Porting/acknowledgements.pl v5.15.6..HEAD
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
 
 =head1 Reporting Bugs