PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
parameters.
-=head2 PERL_DEBUG_READONLY_COW
-
-On some operating systems Perl can be compiled in such a way that any
-attempt to modify string buffers shared by multiple SVs will crash. This
-way XS authors can test that their modules handle copy-on-write scalars
-correctly. See L<perlguts/"Copy on Write"> for detail.
-
-This feature was actually added in 5.19.8, but was unintentionally omitted
-from its delta document.
-
=head2 C<S<use locale>> now compiles on systems without locale ability
Previously doing this caused the program to not compile. Within its
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
-necessity to bootstrapping a fully functional, CPAN-capable Perl installation,
-not usually on concerns over their design.
+Note that the planned removal of these modules from core does not reflect a
+judgement about the quality of the code and should not be taken as a suggestion
+that their use be halted. Their disinclusion from core primarily hinges on
+their necessity to bootstrapping a fully functional, CPAN-capable Perl
+installation, not on concerns over their design.
=over
-=item L<CGI>
+=item L<CGI> and its associated CGI:: packages
+
+=item L<inc::latest>
=item L<Package::Constants>
+=item L<Module::Build> and its associated Module::Build:: packages
+
=back
=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 *
-Accflags=PERL_NO_COW
-=item *
-
-Precomputed hash values are now used in more places during method lookup.
+On some operating systems Perl can be compiled in such a way that any
+attempt to modify string buffers shared by multiple SVs will crash. This
+way XS authors can test that their modules handle copy-on-write scalars
+correctly. See L<perlguts/"Copy on Write"> for detail.
=item *
=item *
+Executing a regex that contains the C<^> anchor (or its variant under the
+C</m> flag) has been made much faster in several situations.
+
+=item *
+
+Precomputed hash values are now used in more places during method lookup.
+
+=item *
+
Constant hash key lookups (C<$hash{key}> as opposed to C<$hash{$key}>) have
long had the internal hash value computed at compile time, to speed up
lookup. This optimisation has only now been applied to hash slices as
=item *
-When doing a global regex match on a string that came from the C<readline>
-or C<E<lt>E<gt>> operator, the data is no longer copied unnecessarily.
-[perl #121259]
-
-=item *
-
-Executing a regex that contains the C<^> anchor (or its variant under the
-C</m> flag) has been made much faster in several situations.
-
-=item *
-
-It is now faster to create certain sorts of lists, including array and hash
-slices.
+The creation of certain sorts of lists, including array and hash slices, is now
+faster.
=item *
=item *
-Dereferencing (as in C<$obj-E<gt>[0]> or C<$obj-E<gt>{k}>) is now faster
-when C<$obj> is an instance of a class that has overloaded methods, but
-doesn't overload any of the dereferencing methods C<@{}>, C<%{}>, and so on.
-
-=item *
-
The first iteration over a large hash (using C<keys> or C<each>) is now
faster. This is achieved by preallocating the hash's internal iterator
state, rather than lazily creating it when the hash is first iterated. (For
=item *
+When doing a global regex match on a string that came from the C<readline>
+or C<E<lt>E<gt>> operator, the data is no longer copied unnecessarily.
+[perl #121259]
+
+=item *
+
+Dereferencing (as in C<$obj-E<gt>[0]> or C<$obj-E<gt>{k}>) is now faster
+when C<$obj> is an instance of a class that has overloaded methods, but
+doesn't overload any of the dereferencing methods C<@{}>, C<%{}>, and so on.
+
+=item *
+
Perl's optimiser no longer skips optimising code that follows certain
C<eval {}> expressions (including those with an apparent infinite loop).
=item *
-A few micro-optimisations have been applied to performance-sensitive parts
-of the implementation, including subroutine invocation and scope exit.
-
-=item *
-
Perl now does less disk I/O when dealing with Unicode properties that cover
up to three ranges of consecutive code points.
=head1 Modules and Pragmata
-XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
-go here. If Module::CoreList is updated, generate an initial draft of the
-following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary
-for important changes should then be added by hand. In an ideal world,
-dual-life modules would have a F<Changes> file that could be cribbed.
-
-[ 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
-
-=item *
-
-L<XXX> has been upgraded from version A.xx to B.yy.
-
-=back
-
-=head2 Removed Modules and Pragmata
-
-The distributions below have been removed from the core, but are still
-available on the CPAN. In many cases, the named distribution includes
-multiple modules, which are not listed individually. For a
-comprehensive list of removals, consult:
-
- $ corelist --dif 5.18.0 5.20.0 | grep absent
-
-=over
-
-=item Archive-Extract
-
-=item B-Lint
-
-=item CPANPLUS
-
-=item File-CheckTree
-
-=item Log-Message
-
-=item Module-Pluggable
-
-=item Object-Accessor
-
-=item Pod-LaTeX
-
-=item Term-UI
-
-=item Text-Soundex
-
-=back
+ XXX TO BE AUTOGENERATED
=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>.
-
=head2 New Documentation
=head3 L<perlrepository>
This document was removed (actually, renamed L<perlgit> and given a major
-overhaul) in Perl 5.13.10, causing Perl documentation websites to show the now
-out of date version in Perl 5.12 as the latest version. It has now been
+overhaul) in Perl v5.14, causing Perl documentation websites to show the now
+out of date version in Perl v5.12 as the latest version. It has now been
restored in stub form, directing readers to current information.
=head2 Changes to Existing Documentation
-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<perldata>
=over 4
=item *
-ithreads were accepted in 5.8.0
+ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0)
=item *
-Long doubles are not experimental
+Long doubles are not considered experimental.
=item *
=item *
-C<goto EXPR> is now documented to handle an expression that evalutes to a
-code reference as if it was C<goto &$coderef>. This behavior is at least ten
-years old.
+C<chop> and C<chomp> now note that they can reset the hash iterator.
=item *
-C<eval EXPR> now has caveats about expanding floating point numbers in some
-locales
+C<exec>'s handling of arguments is now more clearly documented.
=item *
-Noted that C<chop> and C<chomp> can reset the hash iterator
+C<eval EXPR> now has caveats about expanding floating point numbers in some
+locales
=item *
-Improved C<fileno> example
+C<goto EXPR> is now documented to handle an expression that evalutes to a
+code reference as if it was C<goto &$coderef>. This behavior is at least ten
+years old.
=item *
-Since Perl v5.10, it has been possible for subroutines in @INC to return
+Since Perl v5.10, it has been possible for subroutines in C<@INC> to return
a reference to a scalar holding initial source code to prepend to the file.
This is now documented.
C<blessed>, C<isa> and C<reftype> when dealing with references to blessed
objects.
-=item *
-
-L<perlfunc/exec>'s handling of arguments is now more clearly
-documented.
-
=back
=head3 L<perlguts>
=item *
New sections on L<Read-Only Values|perlguts/"Read-Only Values"> and
-L<Copy on Write|perlguts/"Copy on Write"> have been added. They were
-actually added in 5.19.8 but accidentally omitted from its delta document.
+L<Copy on Write|perlguts/"Copy on Write"> have been added.
=back
=item *
-The L<SUPER QUICK PATCH GUIDE|perlhack/SUPER QUICK PATCH GUIDE> section has
+The L<Super Quick Patch Guide|perlhack/SUPER QUICK PATCH GUIDE> section has
been updated.
=back
=item *
-Update to mention fc(), \F
+The documentation now mentions F<fc()> and C<\F>.
=back
=item *
Three L<English> variable names which have long been documented but do not
-actually exist have been removed from the documentation.
+actually exist have been removed from the documentation. These were
+C<$OLD_PERL_VERSION>, C<$OFMT>, and C<$ARRAY_BASE>.
=back
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.
-
=head2 New Diagnostics
-XXX Newly added diagnostic messages go under here, separated into New Errors
-and New Warnings
-
=head3 New Errors
=over 4
=item *
-L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">
-
-(W syscalls) Embedded \0 characters in pathnames or other system call arguments
-produce a warning as of 5.20. The parts after the \0 were formerly ignored by
-system calls.
-
-=item *
-
-L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">
+L<%s on a reference is experimental|perldiag/"%s on a reference is experimental">:
-(W syntax) There is a possible problem with the mixing of a control flow
-operator (e.g. C<return>) and a low-precedence operator like C<or>. Consider:
+The "auto-deref" feature is experimental.
- sub { return $a or $b; }
+Starting in v5.14.0, it was possible to use push, pop, keys, and other
+built-in functions not only on aggregate types, but on references to
+them. The feature was not deployed to its original intended
+specification, and now may become redundant to postfix dereferencing.
+It has always been categorized as an experimental feature, and in
+v5.20.0 is carries a warning as such.
-This is parsed as:
+Warnings will now be issued at compile time when these operations are
+detected.
- sub { (return $a) or $b; }
+ no if $] >= 5.01908, warnings => "experimental::autoderef";
-Which is effectively just:
+Consider, though, replacing the use of these features, as they may
+change behavior again before becoming stable.
- sub { return $a; }
+=item *
-Either use parentheses or the high-precedence variant of the operator.
+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">
-Note this may be also triggered for constructs like:
+L<Trailing white-space in a charnames alias definition is deprecated|perldiag/"Trailing white-space in a charnames alias definition is deprecated">
- sub { 1 if die; }
+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).
=item *
-L<Scalar value %%s[%s] better written as $%s[%s]|perldiag/"Scalar value %%s[%s] better written as $%s[%s]">
+L<Argument "%s" treated as 0 in increment (++)|perldiag/"Argument "%s" treated as 0 in increment (++)">
-(W syntax) In scalar context, you've used an array index/value slice (indicated
-by %) to select a single element of an array. Generally it's better to ask for
-a scalar value (indicated by $). The difference is that C<$foo[&bar]> always
-behaves like a scalar, both in the value it returns and when evaluating its
-argument, while C<%foo[&bar]> provides a list context to its subscript, which
-can do weird things if you're expecting only one subscript. When called in
-list context, it also returns the index (what C<&bar> returns) in addition to
-the value.
+(W numeric) The indicated string was fed as an argument to the C<++> operator
+which expects either a number or a string matching C</^[a-zA-Z]*[0-9]*\z/>.
+See L<perlop/Auto-increment and Auto-decrement> for details.
=item *
-L<Scalar value %%s{%s} better written as $%s{%s}|perldiag/"Scalar value %%s{%s} better written as $%s{%s}">
+L<Attribute prototype(%s) discards earlier prototype attribute in same sub|perldiag/"Attribute prototype(%s) discards earlier prototype attribute in same sub">
-(W syntax) In scalar context, you've used a hash key/value slice (indicated by
-%) to select a single element of a hash. Generally it's better to ask for a
-scalar value (indicated by $). The difference is that C<$foo{&bar}> always
-behaves like a scalar, both in the value it returns and when evaluating its
-argument, while C<@foo{&bar}> and provides a list context to its subscript,
-which can do weird things if you're expecting only one subscript. When called
-in list context, it also returns the key in addition to the value.
+(W misc) A sub was declared as sub foo : prototype(A) : prototype(B) {}, for
+example. Since each sub can only have one prototype, the earlier
+declaration(s) are discarded while the last one is applied.
=item *
-L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">
+L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">
-(D deprecated) Using literal control characters in the source to refer to the
-^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated. This only
-affects code like $\cT, where \cT is a control in the source code: ${"\cT"} and
-$^T remain valid.
+(W syscalls) Embedded \0 characters in pathnames or other system call arguments
+produce a warning as of 5.20. The parts after the \0 were formerly ignored by
+system calls.
=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<Matched non-Unicode code point 0x%X against Unicode property; may not be portable|perldiag/"Matched non-Unicode code point 0x%X against Unicode property; may not be portable">.
-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).
+This replaces the message "Code point 0x%X is not Unicode, all \p{} matches
+fail; all \P{} matches succeed".
=item *
-L<Missing ']' in prototype for %s : %s|perldiag/"Missing ']' in prototype
-for %s : %s">
+L<Missing ']' in prototype for %s : %s|perldiag/"Missing ']' in prototype for %s : %s">
-(W illegalproto) A grouping was started with C<[> but never closed with
-C<]>.
+(W illegalproto) A grouping was started with C<[> but never closed with C<]>.
=item *
-L<Argument "%s" treated as 0 in increment (++)|perldiag/"Argument "%s" treated
-as 0 in increment (++)">
-
-(W numeric) The indicated string was fed as an argument to the C<++> operator
-which expects either a number or a string matching C</^[a-zA-Z]*[0-9]*\z/>.
-See L<perlop/Auto-increment and Auto-decrement> for details.
+L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">
-=item *
+(W syntax) There is a possible problem with the mixing of a control flow
+operator (e.g. C<return>) and a low-precedence operator like C<or>. Consider:
-L<Unexpected exit %u|perldiag/"Unexpected exit %u">
+ sub { return $a or $b; }
-(S) exit() was called or the script otherwise finished gracefully when
-C<PERL_EXIT_WARN> was set in C<PL_exit_flags>.
+This is parsed as:
-=item *
+ sub { (return $a) or $b; }
-L<Unexpected exit failure %u|perldiag/"Unexpected exit failure %u">
+Which is effectively just:
-(S) An uncaught die() was called when C<PERL_EXIT_WARN> was set in
-C<PL_exit_flags>.
+ sub { return $a; }
-=item *
+Either use parentheses or the high-precedence variant of the operator.
-L<Attribute prototype(%s) discards earlier prototype attribute in same sub|perldiag/"Attribute prototype(%s) discards earlier prototype attribute in same sub">
+Note this may be also triggered for constructs like:
-(W misc) A sub was declared as sub foo : prototype(A) : prototype(B) {}, for
-example. Since each sub can only have one prototype, the earlier
-declaration(s) are discarded while the last one is applied.
+ sub { 1 if die; }
=item *
=item *
-L<Useless use of greediness modifier|perldiag/"Useless use of greediness modifier '%c' in regex; marked by <-- HERE in m/%s/">
+L<Scalar value %%s[%s] better written as $%s[%s]|perldiag/"Scalar value %%s[%s] better written as $%s[%s]">
-This fixes [Perl #42957].
+(W syntax) In scalar context, you've used an array index/value slice (indicated
+by %) to select a single element of an array. Generally it's better to ask for
+a scalar value (indicated by $). The difference is that C<$foo[&bar]> always
+behaves like a scalar, both in the value it returns and when evaluating its
+argument, while C<%foo[&bar]> provides a list context to its subscript, which
+can do weird things if you're expecting only one subscript. When called in
+list context, it also returns the index (what C<&bar> returns) in addition to
+the value.
=item *
-L<%s on a reference is experimental|perldiag/"%s on a reference is experimental">:
+L<Scalar value %%s{%s} better written as $%s{%s}|perldiag/"Scalar value %%s{%s} better written as $%s{%s}">
-The "auto-deref" feature is experimental.
+(W syntax) In scalar context, you've used a hash key/value slice (indicated by
+%) to select a single element of a hash. Generally it's better to ask for a
+scalar value (indicated by $). The difference is that C<$foo{&bar}> always
+behaves like a scalar, both in the value it returns and when evaluating its
+argument, while C<@foo{&bar}> and provides a list context to its subscript,
+which can do weird things if you're expecting only one subscript. When called
+in list context, it also returns the key in addition to the value.
-Starting in v5.14.0, it was possible to use push, pop, keys, and other
-built-in functions not only on aggregate types, but on references to
-them. The feature was not deployed to its original intended
-specification, and now may become redundant to postfix dereferencing.
-It has always been categorized as an experimental feature, and in
-v5.20.0 is carries a warning as such.
+=item *
-Warnings will now be issued at compile time when these operations are
-detected.
+L<Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef|perldiag/"Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef">
- no if $] >= 5.01908, warnings => "experimental::autoderef";
+=item *
-Consider, though, replacing the use of these features, as they may
-change behavior again before becoming stable.
+L<Unexpected exit %u|perldiag/"Unexpected exit %u">
+
+(S) exit() was called or the script otherwise finished gracefully when
+C<PERL_EXIT_WARN> was set in C<PL_exit_flags>.
=item *
-L<Matched non-Unicode code point 0x%X against Unicode property; may not be portable|perldiag/"Matched non-Unicode code point 0x%X against Unicode property; may not be portable">.
-This replaces the message "Code point 0x%X is not Unicode, all \p{}
-matches fail; all \P{} matches succeed".
+L<Unexpected exit failure %u|perldiag/"Unexpected exit failure %u">
+
+(S) An uncaught die() was called when C<PERL_EXIT_WARN> was set in
+C<PL_exit_flags>.
+
+=item *
+
+L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">
+
+(D deprecated) Using literal control characters in the source to refer to the
+^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated. This only
+affects code like $\cT, where \cT is a control in the source code: ${"\cT"} and
+$^T remain valid.
=item *
-Added L<Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef|perldiag/"Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef">
+L<Useless use of greediness modifier|perldiag/"Useless use of greediness modifier '%c' in regex; marked by <-- HERE in m/%s/">
+This fixes [Perl #42957].
=back
=back
-=head3 L<find2perl>
-
-=over 4
-
-=item *
-
-L<find2perl> now handles C<?> wildcards correctly. [perl #113054]
-
-=back
-
-=head3 F<bisect.pl> enhancements
+=head3 F<bisect.pl>
The git bisection tool F<Porting/bisect.pl> has had many enhancements.
=back
+=head3 L<find2perl>
+
+=over 4
+
+=item *
+
+L<find2perl> now handles C<?> wildcards correctly. [perl #113054]
+
+=back
+
=head3 L<perlbug>
=over 4
=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 *