summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Signes <rjbs@cpan.org>2016-04-07 08:39:20 -0400
committerRicardo Signes <rjbs@cpan.org>2016-04-10 19:38:48 -0400
commitf3ed8cbf4370a4d22345bef0e4d1f5614133cf0b (patch)
tree9a424ca67d58f706eea02d4f9fabe8523db70c96
parentac96e11d353e84778fd73e5cb2fe4a7f22b58f5f (diff)
downloadperl-f3ed8cbf4370a4d22345bef0e4d1f5614133cf0b.tar.gz
put perl5240delta into place
-rw-r--r--Porting/perl5240delta.pod1741
-rw-r--r--pod/perldelta.pod1659
2 files changed, 1489 insertions, 1911 deletions
diff --git a/Porting/perl5240delta.pod b/Porting/perl5240delta.pod
deleted file mode 100644
index 28a0ee89c9..0000000000
--- a/Porting/perl5240delta.pod
+++ /dev/null
@@ -1,1741 +0,0 @@
-=encoding utf8
-
-=head1 NAME
-
-perl5240delta - what is new for perl v5.24.0
-
-=head1 DESCRIPTION
-
-This document describes the differences between the 5.22.0 release and the
-5.24.0 release.
-
-=head1 Core Enhancements
-
-=head2 Postfix dereferencing is no longer experimental
-
-Using the C<postderef> and C<postderef_qq> features no longer emits a
-warning. Existing code that disables the C<experimental::postderef> warning
-category that they previously used will continue to work. The C<postderef>
-feature has no effect; all Perl code can use postfix dereferencing,
-regardless of what feature declarations are in scope. The C<5.24> feature
-bundle now includes the C<postderef_qq> feature.
-
-=head2 Unicode 8.0 is now supported
-
-For details on what is in this release, see
-L<http://www.unicode.org/versions/Unicode8.0.0/>.
-
-=head2 perl will now croak when closing an in-place output file fails
-
-Until now, failure to close the output file for an in-place edit was not
-detected, meaning that the input file could be clobbered without the edit being
-successfully completed. Now, when the output file cannot be closed
-successfully, an exception is raised.
-
-=head2 New C<\b{lb}> boundary in regular expressions
-
-C<lb> stands for Line Break. It is a Unicode property
-that determines where a line of text is suitable to break (typically so
-that it can be output without overflowing the available horizontal
-space). This capability has long been furnished by the
-L<Unicode::LineBreak> module, but now a light-weight, non-customizable
-version that is suitable for many purposes is in core Perl.
-
-=head2 C<qr/(?[ ])/> now works in UTF-8 locales
-
-L<Extended Bracketed Character Classes|perlrecharclass/Extended Bracketed Character Classes>
-now will successfully compile when S<C<use locale>> is in effect. The compiled
-pattern will use standard Unicode rules. If the runtime locale is not a
-UTF-8 one, a warning is raised and standard Unicode rules are used
-anyway. No tainting is done since the outcome does not actually depend
-on the locale.
-
-=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined
-
-Negative shifts are reverse shifts: left shift becomes right shift,
-and right shift becomes left shift.
-
-Shifting by the number of bits in a native integer (or more) is zero,
-except when the "overshift" is right shifting a negative value under
-C<use integer>, in which case the result is -1 (arithmetic shift).
-
-Until now negative shifting and overshifting have been undefined
-because they have relied on whatever the C implementation happens
-to do. For example, for the overshift a common C behavior is
-"modulo shift":
-
- 1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior.
-
- # And the same for <<, while Perl now produces 0 for both.
-
-Now these behaviors are well-defined under Perl, regardless of what
-the underlying C implementation does. Note, however, that you cannot
-escape the native integer width, you need to know how far left you
-can go. You can use for example:
-
- use Config;
- my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3.
-
-If you need a more bits on the left shift, you can use for example
-the C<bigint> pragma, or the C<Bit::Vector> module from CPAN.
-
-=head2 printf and sprintf now allow reordered precision arguments
-
-That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends
-the existing reordering mechanism (which allows reordering for arguments
-that are used as format fields, widths, and vector separators).
-
-=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO>
-
-When passing the C<SA_SIGINFO> flag to L<sigaction|POSIX/sigaction>, the
-C<errno>, C<status>, C<uid>, C<pid>, C<addr> and C<band> fields are now
-included in the hash passed to the handler, if supported by the
-platform.
-
-=head1 Security
-
-=head2 Set proper umask before calling C<mkstemp(3)>
-
-In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)>
-and restoring it afterwards. This wrongfully tells open(2) to strip
-the owner read and write bits from the given mode before applying it,
-rather than the intended negation of leaving only those bits in place.
-
-Systems that use mode 0666 in C<mkstemp(3)> (like old versions of
-glibc) create a file with permissions 0066, leaving world read and
-write permissions regardless of current umask.
-
-This has been fixed by using umask 0177 instead. [perl #127322]
-
-=head2 fix out of boundary access in Win32 path handling
-
-This is CVE-2015-8608. For more information see
-L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755>
-
-=head2 fix loss of taint in canonpath
-
-This is CVE-2015-8607. For more information see
-L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862>
-
-=head2 Avoid accessing uninitialized memory in win32 C<crypt()>
-
-Added validation that will detect both a short salt and invalid characters
-in the salt.
-L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922>
-
-=head2 Remove duplicate environment variables from C<environ>
-
-Previously, if an environment variable appeared more than once in
-C<environ[]>, C<%ENV> would contain the last entry for that name,
-while a typical C<getenv()> would return the first entry. We now
-make sure C<%ENV> contains the same as what C<getenv> returns.
-
-Second, we remove duplicates from C<environ[]>, so if a setting
-with that name is set in C<%ENV> we won't pass an unsafe value
-to a child process.
-
-[CVE-2016-2381]
-
-=head1 Incompatible Changes
-
-=head2 The C<autoderef> feature has been removed
-
-The experimental C<autoderef> feature (which allowed calling C<push>,
-C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on
-a scalar argument) has been deemed unsuccessful. It has now been removed;
-trying to use the feature (or to disable the C<experimental::autoderef>
-warning it previously triggered) now yields an exception.
-
-=head2 Lexical $_ has been removed
-
-C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion
-with no obvious solution. In Perl 5.18.0, it was made experimental on the
-theory that it would either be removed or redesigned in a less confusing (but
-backward-incompatible) way. Over the following years, no alternatives were
-proposed. The feature has now been removed and will fail to compile.
-
-=head2 C<qr/\b{wb}/> is now tailored to Perl expectations
-
-This is now more suited to be a drop-in replacement for plain C<\b>, but
-giving better results for parsing natural language. Previously it
-strictly followed the current Unicode rules which calls for it to match
-between each white space character. Now it doesn't generally match
-within spans of white space, behaving like C<\b> does. See
-L<perlrebackslash/\b{wb}>
-
-=head2 Regular expression compilation errors
-
-Some regular expression patterns that had runtime errors now
-don't compile at all.
-
-Almost all Unicode properties using the C<\p{}> and C<\P{}> regular
-expression pattern constructs are now checked for validity at pattern
-compilation time, and invalid ones will cause the program to not
-compile. In earlier releases, this check was often deferred until run
-time. Whenever an error check is moved from run- to compile time,
-erroneous code is caught 100% of the time, whereas before it would only
-get caught if and when the offending portion actually gets executed,
-which for unreachable code might be never.
-
-=head2 C<qr/\N{}/> now disallowed under C<use re "strict">
-
-An empty C<\N{}> makes no sense, but for backwards compatibility is
-silently accepted as doing nothing. But now this is a fatal error under
-the experimental feature L<re/'strict' mode>.
-
-=head2 Nested declarations are now disallowed
-
-A C<my>, C<our>, or C<state> declaration is no longer allowed inside
-of another C<my>, C<our>, or C<state> declaration.
-
-For example, these are now fatal:
-
- my ($x, my($y));
- our (my $x);
-
-L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587>
-
-L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058>
-
-=head2 The C</\C/> character class has been removed.
-
-This regular expression character class was deprecated in v5.20.0 and has
-produced a deprecation warning since v5.22.0. It is now a compile-time
-error. If you need to examine the individual bytes that make up a
-UTF8-encoded character, then use C<utf8::encode()> on the string (or a
-copy) first.
-
-=head2 C<chdir('')> no longer chdirs home
-
-Using C<chdir('')> or C<chdir(undef)> to chdir home has been deprecated since
-perl v5.8, and will now fail. Use C<chdir()> instead.
-
-=head2 ASCII characters in variable names must now be all visible
-
-It was legal until now on ASCII platforms for variable names to contain
-non-graphical ASCII control characters (ordinals 0 through 31, and 127,
-which are the C0 controls and C<DELETE>). This usage has been
-deprecated since v5.20, and as of now causes a syntax error. The
-variables these names referred to are special, reserved by Perl for
-whatever use it may choose, now, or in the future. Each such variable
-has an alternative way of spelling it. Instead of the single
-non-graphic control character, a two character sequence beginning with a
-caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>. Details are at
-L<perlvar>. It remains legal, though unwise and deprecated (raising a
-deprecation warning), to use certain non-graphic non-ASCII characters in
-variables names when not under S<C<use utf8>>. No code should do this,
-as all such variables are reserved by Perl, and Perl doesn't currently
-define any of them (but could at any time, without notice).
-
-=head2 An off by one issue in C<$Carp::MaxArgNums> has been fixed
-
-C<$Carp::MaxArgNums> is supposed to be the number of arguments to display.
-Prior to this version, it was instead showing C<$Carp::MaxArgNums> + 1 arguments,
-contrary to the documentation.
-
-=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
-
-The experimental Extended Bracketed Character Classes can contain regular
-bracketed character classes within them. These differ from regular ones in
-that white space is generally ignored, unless escaped by preceding it with a
-backslash. The white space that is ignored is now limited to just tab C<\t>
-and SPACE characters. Previously, it was any white space. See
-L<perlrecharclass/Extended Bracketed Character Classes>.
-
-=head1 Deprecations
-
-=head2 Using code points above the platform's C<IV_MAX> is now deprecated
-
-Unicode defines code points in the range C<0..0x10FFFF>. Some standards
-at one time defined them up to 2**31 - 1, but Perl has allowed them to
-be as high as anything that will fit in a word on the platform being
-used. However, use of those above the platform's C<IV_MAX> is broken in
-some constructs, notably C<tr///>, regular expression patterns involving
-quantifiers, and in some arithmetic and comparison operations, such as
-being the upper limit of a loop. Now the use of such code points raises
-a deprecation warning, unless that warning category is turned off.
-C<IV_MAX> is typically 2**31 -1 on 32-bit platforms, and 2**63-1 on
-64-bit ones.
-
-=head2 Doing bitwise operations on strings containing code points above
-0xFF is deprecated
-
-The string bitwise operators treat their operands as strings of bytes,
-and values beyond 0xFF are nonsensical in this context. To operate on
-encoded bytes, first encode the strings. To operate on code points'
-numeric values, use C<split> and C<map ord>. In the future, this
-warning will be replaced by an exception.
-
-=head2 sysread(), syswrite(), recv() and send() are deprecated on
-:utf8 handles
-
-The sysread(), recv(), syswrite() and send() operators
-are deprecated on handles that have the C<:utf8> layer, either
-explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
-
-Both sysread() and recv() currently use only the C<:utf8> flag for the
-stream, ignoring the actual layers. Since sysread() and recv() do no
-UTF-8 validation they can end up creating invalidly encoded scalars.
-
-Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
-ignoring any layers. If the flag is set, both write the value UTF-8
-encoded, even if the layer is some different encoding, such as the
-example above.
-
-Ideally, all of these operators would completely ignore the C<:utf8>
-state, working only with bytes, but this would result in silently
-breaking existing code. To avoid this a future version of perl will
-throw an exception when any of sysread(), recv(), syswrite() or send()
-are called on handle with the C<:utf8> layer.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-The overhead of scope entry and exit has been considerably reduced, so
-for example subroutine calls, loops and basic blocks are all faster now.
-This empty function call now takes about a third less time to execute:
-
- sub f{} f();
-
-=item *
-
-Many languages, such as Chinese, are caseless. Perl now knows about
-most modern commercially important ones, and skips much of the work when
-a program tries to change case in them (like C<ucfirst()>) or match
-caselessly (C<qr//i>). This will speed up a program, such as a web
-server, that can operate on multiple languages, while operating on a
-caseless one.
-
-=item *
-
-C</fixed-substr/> has been made much faster.
-
-On platforms with a libc memchr() implementation which makes good use of
-underlying hardware support, patterns which include fixed substrings will now
-often be much faster; for example with glibc on a recent x86_64 CPU, this:
-
- $s = "a" x 1000 . "wxyz";
- $s =~ /wxyz/ for 1..30000
-
-is now about 7 times faster. On systems with slow memchr(), e.g. 32-bit ARM
-Raspberry Pi, there will be a small or little speedup. Conversely, some
-pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3
-times slower on the rPi, 1.5x slower on x86_64.
-
-=item *
-
-Faster addition, subtraction and multiplication.
-
-Since 5.8.0, arithmetic became slower due to the need to support
-64-bit integers. To deal with 64-bit integers, a lot more corner
-cases need to be checked, which adds time. We now detect common
-cases where there is no need to check for those corner cases,
-and special-case them.
-
-=item *
-
-Preincrement, predecrement, postincrement, and postdecrement have been
-made faster by internally splitting the functions which handled multiple
-cases into different functions.
-
-=item *
-
-Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">)
-for XSUBs and const subs has been removed. This removed one glob/scalar combo
-for each unique C<.c> file that XSUBs and const subs came from. On startup
-(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created.
-Loading XS modules created more glob/scalar combos. These things were created
-regardless if the perl debugger was being used or not, unlike for pure perl
-subs, and ignores that the perl debugger can not debug C code.
-
-=item *
-
-On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not
-exist, is now 3.5x faster than before.
-
-=item *
-
-Single arguments in list assign are now slightly faster:
-
- ($x) = (...);
- (...) = ($x);
-
-=item *
-
-Less peak memory is now used when compiling regular expression patterns.
-
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-XXX: todo
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perlapi>
-
-=over 4
-
-=item *
-
-The process of using undocumented globals has been documented, namely, that one
-should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>
-first to get the go-ahead for documenting and using an undocumented function or
-global variable.
-
-=back
-
-=head3 L<perlcall>
-
-=over 4
-
-=item *
-
-A number of cleanups have been made to perlcall, including:
-
-=over 4
-
-=item *
-
-use EXTEND(SP, n) and PUSHs() instead of XPUSHs() where applicable
-and update prose to match
-
-=item *
-
-add POPu, POPul and POPpbytex to the "complete list of POP macros"
-and clarify the documentation for some of the existing entries, and
-a note about side-effects
-
-=item *
-
-add API documentation for POPu and POPul
-
-=item *
-
-use ERRSV more efficiently
-
-=item *
-
-approaches to thread-safety storage of SVs.
-
-=back
-
-=back
-
-=head3 L<perlfunc>
-
-=over 4
-
-=item *
-
-The documentation of C<hex> has been revised to clarify valid inputs.
-
-=item *
-
-Better explain meaning of negative PIDs in C<waitpid>.
-L<[perl #127080]|https://rt.perl.org/Ticket/Display.html?id=127080>
-
-=item *
-
-General cleanup: there's more consistency now (in POD usage, grammar, code
-examples), better practices in code examples (use of C<my>, removal of bareword
-filehandles, dropped usage of C<&> when calling subroutines, ...), etc.
-
-=back
-
-=head3 L<perlguts>
-
-=over 4
-
-=item *
-
-A new section has been added, L<perlguts/"Dynamic Scope and the Context
-Stack">, which explains how the perl context stack works.
-
-=back
-
-=head3 L<perlmodlib>
-
-=over 4
-
-=item *
-
-We now recommend contacting the module-authors list or PAUSE in seeking
-guidance on the naming of modules.
-
-=back
-
-=head3 L<perlop>
-
-=over 4
-
-=item *
-
-The documentation of C<qx//> now describes how C<$?> is affected.
-
-=back
-
-=head3 L<perlpolicy>
-
-=over 4
-
-=item *
-
-This note has been added to perlpolicy:
-
- While civility is required, kindness is encouraged; if you have any doubt
- about whether you are being civil, simply ask yourself, "Am I being kind?"
- and aspire to that.
-
-=back
-
-=head3 L<perlreftut>
-
-=over 4
-
-=item *
-
-Fix some examples to be L<strict> clean.
-
-=back
-
-=head3 L<perlrebackslash>
-
-=over 4
-
-=item *
-
-Clarify that in languages like Japanese and Thai, dictionary lookup
-is required to determine word boundaries.
-
-=back
-
-=head3 L<perlsub>
-
-=over 4
-
-=item *
-
-Updated to note that anonymous subroutines can have signatures.
-
-=back
-
-=head3 L<perlsyn>
-
-=over 4
-
-=item *
-
-Fixed a broken example where C<=> was used instead of
-C<==> in conditional in do/while example.
-
-=back
-
-=head3 L<perltie>
-
-=over 4
-
-=item *
-
-The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
-
-=back
-
-=head3 L<perlunicode>
-
-=over 4
-
-=item *
-
-Discourage use of 'In' prefix for Unicode Block property.
-
-=back
-
-=head3 L<perlvar>
-
-=over 4
-
-=item *
-
-The documentation of C<$@> was reworded to clarify that it is not just for
-syntax errors in C<eval>.
-L<[perl #124034]|https://rt.perl.org/Ticket/Display.html?id=124034>
-
-=item *
-
-The specific true value of C<$!{E...}> is now documented, noting that it is
-subject to change and not guaranteed.
-
-=item *
-
-Use of C<$OLD_PERL_VERSION> is now discouraged.
-
-=back
-
-=head3 L<perlxs>
-
-=over 4
-
-=item *
-
-The documentation of C<PROTOTYPES> has been corrected; they are I<disabled>
-by default, not I<enabled>.
-
-=back
-
-=head1 Diagnostics
-
-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>.
-
-=head2 New Diagnostics
-
-=head3 New Errors
-
-=over 4
-
-=item *
-
-L<%s must not be a named sequence in transliteration operator|perldiag/"%s must not be a named sequence in transliteration operator">
-
-(F) Transliteration (C<tr///> and C<y///>) transliterates individual
-characters. But a named sequence by definition is more than an
-individual charater, and hence doing this operation on it doesn't make
-sense.
-
-=item *
-
-L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/">
-
-=item *
-
-L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s"">
-
-(F) A "my", "our" or "state" declaration was found within another declaration,
-such as C<my ($x, my($y), $z)> or C<our (my $x)>.
-
-=item *
-
-L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/">
-
-=item *
-
-L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
-|perldiag/"Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>">
-
-=item *
-
-L<Illegal user-defined property name|perldiag/"Illegal user-defined property name">
-
-=item *
-
-L<Invalid number '%s' for -C option.|perldiag/"Invalid number '%s' for -C option.">
-
-(F) You supplied a number to the -C option that either has extra leading
-zeroes or overflows perl's unsigned integer representation.
-
-=item *
-
-L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
-
-=item *
-
-L<<< Sequence (?PE<lt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
-|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
-
-=item *
-
-L<Sequence (?PE<gt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
-|perldiag/"Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>">
-
-=back
-
-=head3 New Warnings
-
-=over 4
-
-=item *
-
-L<Assuming NOT a POSIX class since %s in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|
-perldiag/Assuming NOT a POSIX class since %s in regex; marked by <-- HERE in mE<sol>%sE<sol>>
-
-=item *
-
-L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles">
-
-(W deprecated) The sysread(), recv(), syswrite() and send() operators
-are deprecated on handles that have the C<:utf8> layer, either
-explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
-
-Both sysread() and recv() currently use only the C<:utf8> flag for the
-stream, ignoring the actual layers. Since sysread() and recv() do no
-UTF-8 validation they can end up creating invalidly encoded scalars.
-
-Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
-ignoring any layers. If the flag is set, both write the value UTF-8
-encoded, even if the layer is some different encoding, such as the
-example above.
-
-Ideally, all of these operators would completely ignore the C<:utf8>
-state, working only with bytes, but this would result in silently
-breaking existing code. To avoid this a future version of perl will
-throw an exception when any of sysread(), recv(), syswrite() or send()
-are called on handle with the C<:utf8> layer.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-Accessing the C<IO> part of a glob as C<FILEHANDLE> instead of C<IO> is no
-longer deprecated. It is discouraged to encourage uniformity (so that, for
-example, one can grep more easily) but it will not be removed.
-L<[perl #127060]|https://rt.perl.org/Ticket/Display.html?id=127060>
-
-=item *
-
-The diagnostic C<< Hexadecimal float: internal error >> has been changed to
-C<< Hexadecimal float: internal error (%s) >> to include more information.
-
-=item *
-
-L<Can't modify non-lvalue subroutine call of &%s|perldiag/"Can't modify non-lvalue subroutine call of &%s">
-
-This error now reports the name of the non-lvalue subroutine you attempted to
-use as an lvalue.
-
-=item *
-
-When running out of memory during an attempt the increase the stack
-size, previously, perl would die using the cryptic message
-C<< panic: av_extend_guts() negative count (-9223372036854775681) >>.
-This has been fixed to show the prettier message:
-L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" >>
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-C<Configure> now acts as if the C<-O> option is always passed, allowing command
-line options to override saved configuration. This should eliminate confusion
-when command line options are ignored for no obvious reason. C<-O> is now
-permitted, but ignored.
-
-=item *
-
-Bison 3.0 is now supported.
-
-=item *
-
-F<Configure> no longer probes for F<libnm> by default. Originally
-this was the "New Math" library, but the name has been re-used by the
-GNOME NetworkManager.
-L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131>
-
-=item *
-
-Added F<Configure> probes for C<newlocale>, C<freelocale>, and C<uselocale>.
-
-=item *
-
-C<< PPPort.so/PPPort.dll >> no longer get installed, as they are
-not used by C<< PPPort.pm >>, only by its test files.
-
-=item *
-
-It is now possible to specify which compilation date to show on
-C<< perl -V >> output, by setting the macro C<< PERL_BUILD_DATE >>.
-
-=item *
-
-Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
-C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
-the interpreter, since Perl 5.17.10. This has been fixed.
-
-=item *
-
-F<Configure> should handle spaces in paths a little better.
-
-=item *
-
-No longer generate EBCDIC POSIX-BC tables. We don't believe anyone is
-using Perl and POSIX-BC at this time, and by not generating these tables
-it saves time during development, and makes the resulting tar ball smaller.
-
-=item *
-
-The GNU Make makefile for Win32 now supports parallel builds. [perl #126632]
-
-=item *
-
-You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632]
-
-=item *
-
-The Win32 miniperl now has a real C<getcwd> which increases build performance
-resulting in C<getcwd()> being 605x faster in Win32 miniperl.
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-A new test (F<t/op/aassign.t>) has been added to test the list assignment operator
-C<OP_AASSIGN>.
-
-=item *
-
-Parallel building has been added to the dmake C<makefile.mk> makefile. All
-Win32 compilers are supported.
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item AmigaOS
-
-The AmigaOS port has been reintegrated into the main tree, based off of
-Perl 5.22.1.
-
-=item Cygwin
-
-Tests are more robust against unusual cygdrive prefixes.
-L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834>
-
-=item EBCDIC
-
-=over 4
-
-=item UTF-EBCDIC extended
-
-UTF-EBCDIC is like UTF-8, but for EBCDIC platforms. It now has been
-extended so that it can represent code points up to 2 ** 64 - 1 on
-platforms with 64-bit words. This brings it into parity with UTF-8.
-This enhancement requires an incompatible change to the representation
-of code points in the range 2 ** 30 to 2 ** 31 -1 (the latter was the
-previous maximum representable code point). This means that a file that
-contains one of these code points, written out with previous versions of
-perl cannot be read in, without conversion, by a perl containing this
-change. We do not believe any such files are in existence, but if you
-do have one, submit a ticket at L<perlbug@perl.org|mailto:perlbug@perl.org>,
-and we will write a conversion script for you.
-
-=item EBCDIC C<cmp()> and C<sort()> fixed for UTF-EBCDIC strings
-
-Comparing two strings that were both encoded in UTF-8 (or more
-precisely, UTF-EBCDIC) did not work properly until now. Since C<sort()>
-uses C<cmp()>, this fixes that as well.
-
-=item EBCDIC C<tr///> and C<y///> fixed for C<\N{}>, and C<S<use utf8>> ranges
-
-Perl v5.22 introduced the concept of portable ranges to regular
-expression patterns. A portable range matches the same set of
-characters no matter what platform is being run on. This concept is now
-extended to C<tr///>. See
-C<L<trE<sol>E<sol>E<sol>|perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>>.
-
-There were also some problems with these operations under S<C<use
-utf8>>, which are now fixed
-
-=back
-
-=item FreeBSD
-
-=over
-
-=item *
-
-Use the C<fdclose()> function from FreeBSD if it is available.
-L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847>
-
-=back
-
-=item IRIX
-
-=over
-
-=item *
-
-Under some circumstances IRIX stdio fgetc() and fread() set the errno to
-C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno
-is now cleared in such cases.
-L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
-
-=item *
-
-Problems when multiplying long doubles by infinity have been fixed.
-L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
-
-=back
-
-=item MacOS X
-
-=over
-
-=item *
-
-Until now OS X builds of perl have specified a link target of 10.3 (Panther,
-2003) but have not specified a compiler target. From now on, builds of perl on
-OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X
-version and specify that as the explicit build target in both compiler and
-linker flags, thus preserving binary compatibility for extensions built later
-regardless of changes in OS X, SDK, or compiler and linker versions. To
-override the default value used in the build and preserved in the flags,
-specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building
-perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or
-earlier there is no change to the behavior present when those systems were
-current; the link target is still OS X 10.3 and there is no explicit compiler
-target.
-
-=item *
-
-Builds with both -DDEBUGGING and threading enabled would fail with a
-"panic: free from wrong pool" error when built or tested from Terminal
-on OS X. This was caused by perl's internal management of the
-environment conflicting with an atfork handler using the libc
-setenv() function to update the environment.
-
-Perl now uses setenv()/unsetenv() to update the environment on OS X.
-L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
-
-=back
-
-=item Solaris
-
-All Solaris now builds shared libperl.
-
-Solaris and variants like OpenIndiana now always build with the shared
-Perl library (Configure -Duseshrplib). This was required for the
-OpenIndiana builds, but this has also been the setting for Oracle/Sun
-Perl builds for several years.
-
-=item Tru64
-
-Workaround where Tru64 balks when prototypes are listed as
-C<< PERL_STATIC_INLINE >>, but where the test is build with
-C<< -DPERL_NO_INLINE_FUNCTIONS >>.
-
-=item VMS
-
-=over
-
-=item *
-
-On VMS, the math function prototypes in C<math.h> are now visible under C++.
-Now building the POSIX extension with C++ will no longer crash.
-
-=item *
-
-VMS has had C<setenv/unsetenv> since v7.0 (released in 1996), C<Perl_vmssetenv>
-now always uses C<setenv/unsetenv>.
-
-=item *
-
-Perl now implements its own C<killpg> by scanning for processes in the
-specified process group, which may not mean exactly the same thing as a Unix
-process group, but allows us to send a signal to a parent (or master) process
-and all of its sub-processes. At the perl level, this means we can now send a
-negative pid like so:
-
- kill SIGKILL, -$pid;
-
-to signal all processes in the same group as C<$pid>.
-
-=item *
-
-For those C<%ENV> elements based on the CRTL environ array, we've always
-preserved case when setting them but did look-ups only after upcasing the
-key first, which made lower- or mixed-case entries go missing. This problem
-has been corrected by making C<%ENV> elements derived from the environ array
-case-sensitive on look-up as well as case-preserving on store.
-
-=item *
-
-Environment look-ups for C<PERL5LIB> and C<PERLLIB> previously only
-considered logical names, but now consider all sources of C<%ENV> as
-determined by C<PERL_ENV_TABLES> and as documented in L<perlvms/%ENV>.
-
-=item *
-
-The minimum supported version of VMS is now v7.3-2, released in 2003. As a
-side effect of this change, VAX is no longer supported as the terminal
-release of OpenVMS VAX was v7.3 in 2001.
-
-=back
-
-=item Win32
-
-=over
-
-=item *
-
-A new build option C<USE_NO_REGISTRY> has been added to the makefiles. This
-option is off by default, meaning the default is to do Windows registry
-lookups. This option stops Perl from looking inside the registry for anything.
-For what values are looked up in the registry see L<perlwin32>. Internally, in
-C, the name of this option is C<WIN32_NO_REGISTRY>.
-
-=item *
-
-The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and
-C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV>
-vars starting with C<PERL> has changed. Previously, the 2 keys were checked
-for entries at all times through Perl processes life time even if they did not
-exist. For performance reasons, now, if the root key (i.e.
-C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does
-not exist at process start time, it will not be checked again for C<%ENV>
-override entries for the remainder of the Perl processes life. This more
-closely matches Unix behaviour in that the environment is copied or inherited
-on startup and changing the variable in the parent process or another process
-or editing F<.bashrc> will not change the environmental variable in other
-existing, running, processes.
-
-=item *
-
-One glob fetch was removed for each C<-X> or C<stat> call whether done from
-Perl code or internally from Perl's C code. The glob being looked up was
-C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and
-C<stat> slightly faster.
-
-=item *
-
-During miniperl's process startup, during the build process, 4 to 8 IO calls
-related to the process starting F<.pl> and the F<buildcustomize.pl> file were
-removed from the code opening and executing the first 1 or 2 F<.pl> files.
-
-=item *
-
-Builds using Microsoft Visual C++ 2003 and earlier no longer produce
-an "INTERNAL COMPILER ERROR" message. [perl #126045]
-
-=item *
-
-Visual C++ 2013 builds will now execute on XP and higher. Previously they would
-only execute on Vista and higher.
-
-=item *
-
-You can now build perl with GNU Make and GCC. [perl #123440]
-
-=item *
-
-C<truncate($filename, $size)> now works for files over 4GB in size.
-[perl #125347]
-
-=item *
-
-Parallel building has been added to the dmake C<makefile.mk> makefile. All
-Win32 compilers are supported.
-
-=item *
-
-Building a 64-bit perl with a 64-bit GCC but a 32-bit gmake would
-result in an invalid C<$Config{archname}> for the resulting perl.
-[perl #127584]
-
-=item *
-
-Errors set by Winsock functions are now put directly into C<$^E>, and the
-relevant C<WSAE*> error codes are now exported from the L<Errno> and L<POSIX>
-modules for testing this against.
-
-The previous behaviour of putting the errors (converted to POSIX-style C<E*>
-error codes since Perl 5.20.0) into C<$!> was buggy due to the non-equivalence
-of like-named Winsock and POSIX error constants, a relationship between which
-has unfortunately been established in one way or another since Perl 5.8.0.
-
-The new behaviour provides a much more robust solution for checking Winsock
-errors in portable software without accidentally matching POSIX tests that were
-intended for other OSes and may have different meanings for Winsock.
-
-The old behaviour is currently retained, warts and all, for backwards
-compatibility, but users are encouraged to change any code that tests C<$!>
-against C<E*> constants for Winsock errors to instead test C<$^E> against
-C<WSAE*> constants. After a suitable deprecation period, the old behaviour may
-be removed, leaving C<$!> unchanged after Winsock function calls, to avoid any
-possible confusion over which error variable to check.
-
-=back
-
-=item ppc64el floating point
-
-The floating point format of ppc64el (Debian naming for little-endian
-PowerPC) is now detected correctly.
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-The implementation of perl's context stack system, and its internal API,
-have been heavily reworked. Note that no significant changes have been
-made to any external APIs, but XS code which relies on such internal
-details may need to be fixed. The main changes are:
-
-=over 4
-
-=item *
-
-The C<PUSHBLOCK()>, C<POPSUB()> etc. macros have been replaced with static
-inline functions such as C<cx_pushblock()>, C<cx_popsub()> etc. These use
-function args rather than implicitly relying on local vars such as
-C<gimme> and C<newsp> being available. Also their functionality has
-changed: in particular, C<cx_popblock()> no longer decrements
-C<cxstack_ix>. The ordering of the steps in the C<pp_leave*> functions
-involving C<cx_popblock()>, C<cx_popsub()> etc. has changed. See the new
-documentation, L<perlguts/"Dynamic Scope and the Context Stack">, for
-details on how to use them.
-
-=item *
-
-Various macros, which now consistently have a CX_ prefix, have been added:
-
- CX_CUR(), CX_LEAVE_SCOPE(), CX_POP()
-
-or renamed:
-
- CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST()
-
-=item *
-
-C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so
-C<pp_enter*> and C<pp_leave*> no longer do
-
- ENTER; SAVETMPS; ....; LEAVE
-
-=item *
-
-C<cx_popblock()> now also restores C<PL_curpm>.
-
-=item *
-
-In C<dounwind()> for every context type, the current savestack frame is
-now processed before each context is popped; formerly this was only done
-for sub-like context frames. This action has been removed from
-C<cx_popsub()> and placed into its own macro, C<CX_LEAVE_SCOPE(cx)>, which
-must be called before C<cx_popsub()> etc.
-
-C<dounwind()> now also does a C<cx_popblock()> on the last popped frame
-(formerly it only did the C<cx_popsub()> etc. actions on each frame).
-
-=item *
-
-The temps stack is now freed on scope exit; previously, temps created
-during the last statement of a block wouldn't be freed until the next
-C<nextstate> following the block (apart from an existing hack that did
-this for recursive subs in scalar context); and in something like
-C<f(g())>, the temps created by the last statement in C<g()> would
-formerly not be freed until the statement following the return from
-C<f()>.
-
-=item *
-
-Most values that were saved on the savestack on scope entry are now
-saved in suitable new fields in the context struct, and saved and
-restored directly by C<cx_pushfoo()> and C<cx_popfoo()>, which is much
-faster.
-
-=item *
-
-Various context struct fields have been added, removed or modified.
-
-=item *
-
-The handling of C<@_> in C<cx_pushsub()> and C<cx_popsub()> has been
-considerably tidied up, including removing the C<argarray> field from the
-context struct, and extracting out some common (but rarely used) code into
-a separate function, C<clear_defarray()>. Also, useful subsets of
-C<cx_popsub()> which had been unrolled in places like C<pp_goto> have been
-gathered into the new functions C<cx_popsub_args()> and
-C<cx_popsub_common()>.
-
-=item *
-
-C<pp_leavesub> and C<pp_leavesublv> now use the same function as the rest
-of the C<pp_leave*>'s to process return args.
-
-=item *
-
-C<CXp_FOR_PAD> and C<CXp_FOR_GV> flags have been added, and
-C<CXt_LOOP_FOR> has been split into C<CXt_LOOP_LIST>, C<CXt_LOOP_ARY>.
-
-=item *
-
-Some variables formerly declared by C<dMULTICALL> (but not documented) have
-been removed.
-
-=back
-
-=item *
-
-The obscure C<PL_timesbuf> variable, effectively a vestige of Perl 1, has
-been removed. It was documented as deprecated in Perl 5.20, with a statement
-that it would be removed early in the 5.21.x series; that has now finally
-happened.
-L<[perl #121351]|https://rt.perl.org/Ticket/Display.html?id=121351>
-
-=item *
-
-Remove unwarranted assertion in C<Perl_newATTRSUB_x()>. If a stub subroutine
-definition with a prototype has been seen, then any subsequent stub (or
-definition) of the same subroutine with an attribute was causing an assertion
-failure because of a null pointer.
-L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845>
-
-=item *
-
-Replace C<::> with C<__> in C<ExtUtils::ParseXS> like it's done for
-parameters/return values. This is more consistent, and simplifies writing XS
-code wrapping C++ classes into a nested Perl namespace (it requires only
-a typedef for C<Foo__Bar> rather than two, one for C<Foo_Bar> and the other
-for C<Foo::Bar>).
-
-=item *
-
-Deprecate the C<to_utf8_case()> function, see
-L<http://nntp.perl.org/group/perl.perl5.porters/233287>.
-
-=item *
-
-Perl core code and the threads extension have been annotated so that,
-if Perl is configured to use threads, then during compile-time clang (3.6
-or later) will warn about suspicious uses of mutexes.
-See L<http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more
-information.
-
-=item *
-
-The C<signbit()> emulation has been enhanced. This will help older
-and/or more exotic platforms or configurations.
-
-=item *
-
-The C<to_utf8_case> function is discouraged in favor of C<toUPPER_utf8>,
-C<toTITLE_utf8>, C<toLOWER_utf8>, and C<toFOLD_utf8>.
-
-=item *
-
-EBCDIC code paths have largely been unified to avoid repetition.
-
-=item *
-
-MSWin32 code for C<$^X> has been moved out of the F<win32> directory to
-F<caretx.c>, where other operating systems set that variable.
-
-=item *
-
-C<< sv_ref() >> is now part of the API.
-
-=item *
-
-L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>. It
-previously has always returned C<0> since Perl 5.000 stable but that was
-undocumented. Although C<sv_backoff> is marked as public API, XS code is not
-expected to be impacted since the proper API call would be through public API
-C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public
-C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a
-meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>.
-
-=item *
-
-The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues
-with integer truncation and wrapping. In particular, some casts formerly used
-within the macros have been removed. This means for example that passing an
-unsigned nitems argument is likely to raise a compiler warning now (it's always
-been documented to require a signed value; formerly int, lately SSize_t).
-
-=item *
-
-C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed.
-
-=item *
-
-C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-It now works properly to specify a user-defined property, such as
-
- qr/\p{mypkg1::IsMyProperty}/i
-
-with C</i> caseless matching, an explicit package name, and
-I<IsMyProperty> not defined at the time of the pattern compilation.
-
-=item *
-
-Perl's memcpy(), memmove(), memset() and memcmp() fallbacks are now
-more compatible with the originals. [perl #127619]
-
-=item *
-
-Fixed the issue where a C<< s///r >>) with B<< -DPERL_NO_COW >> attempts
-to modify the source SV, resulting in the program dying. [perl #127635]
-
-=item *
-
-Fixed a spurious warning about posix character classes. [perl #127581]
-
-=item *
-
-Fixed an obscure case where a pattern could fail to match. This only
-occurred when matching characters from the set of C1 controls, when
-the target matched string was in UTF-8, and only on EBCDIC platforms.
-
-=item *
-
-Fixed over eager warnings for C<< /[.foo.]/ >>.
-
-This prevents Perl from warning about constructs like C<< /[.].*[.]/ >>.
-[perl #127582, #127604]
-
-=item *
-
-Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously,
-it assumed that if the filename (without the F<.pmc?> extension) differed
-from the package name, if was a misspelled use statement (i.e. C<use Strict>
-instead of C<use strict>). We now check whether there's really a
-miscapitalization happening, and not another issue.
-
-=item *
-
-Turn an assertion into a more user friendly failure when parsing
-regexes. [perl #127599]
-
-=item *
-
-Correctly raise an error when trying to compile patterns with
-unterminated character classes while there are trailing backslashes.
-[perl #126141].
-
-=item *
-
-Line numbers larger than 2**31-1 but less than 2**32 are no longer
-returned by caller() as negative numbers. [perl #126991]
-
-=item *
-
-C<< unless ( I<assignment> ) >> now properly warns when syntax
-warnings are enabled. [perl #127122]
-
-=item *
-
-Setting an C<ISA> glob to an array reference now properly adds
-C<isaelem> magic to any existing elements. Previously modifying such
-an element would not update the ISA cache, so method calls would call
-the wrong function. Perl would also crash if the C<ISA> glob was
-destroyed, since new code added in 5.23.7 would try to release the
-C<isaelem> magic from the elements. [perl #127351]
-
-=item *
-
-If a here-doc was found while parsing another operator, the parser had
-already read end of file, and the here-doc was not terminated, perl
-could produce an assertion or a segmentation fault. This now reliably
-complains about the unterminated here-doc. [perl #125540]
-
-=item *
-
-untie() would sometimes return the last value returned by the UNTIE()
-handler as well as it's normal value, messing up the stack. [perl
-#126621]
-
-=item *
-
-Fixed an operator precedence problem when C< castflags & 2> is true.
-[perl #127474]
-
-=item *
-
-Caching of DESTROY methods could result in a non-pointer or a
-non-STASH stored in the SvSTASH() slot of a stash, breaking the B
-STASH() method. The DESTROY method is now cached in the MRO metadata
-for the stash. [perl #126410]
-
-=item *
-
-The AUTOLOAD method is now called when searching for a DESTROY method,
-and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494]
-
-=item *
-
-Avoid parsing beyond the end of the buffer when processing a C<#line>
-directive with no filename. [perl #127334]
-
-=item *
-
-Perl now raises a warning when a regular expression pattern looks like
-it was supposed to contain a POSIX class, like C<qr/[[:alpha:]]/>, but
-there was some slight defect in its specification which causes it to
-instead be treated as a regular bracketed character class. An example
-would be missing the second colon in the above like this:
-C<qr/[[:alpha]]/>. This compiles to match a sequence of two characters.
-The second is C<"]">, and the first is any of: C<"[">, C<":">, C<"a">,
-C<"h">, C<"l">, or C<"p">. This is unlikely to be the intended
-meaning, and now a warning is raised. No warning is raised unless the
-specification is very close to one of the 14 legal POSIX classes. (See
-L<perlrecharclass/POSIX Character Classes>.)
-[perl #8904]
-
-=item *
-
-Certain regex patterns involving a complemented POSIX class in an
-inverted bracketed character class, and matching something else
-optionally would improperly fail to match. An example of one that could
-fail is C</qr/_?[^\Wbar]\x{100}/>. This has been fixed.
-[perl #127537]
-
-=item *
-
-Perl 5.22 added support to the C99 hexadecimal floating point notation,
-but sometimes misparses hex floats. This has been fixed.
-[perl #127183]
-
-=item *
-
-A regression that allowed undeclared barewords in hash keys to work despite
-strictures has been fixed.
-L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981>
-
-=item *
-
-Calls to the placeholder C<&PL_sv_yes> used internally when an C<import()>
-or C<unimport()> method isn't found now correctly handle scalar context.
-L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042>
-
-=item *
-
-Report more context when we see an array where we expect to see an
-operator and avoid an assertion failure.
-L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737>
-
-=item *
-
-Modifying an array that was previously a package C<@ISA> no longer
-causes assertion failures or crashes.
-L<[perl #123788]|https://rt.perl.org/Ticket/Display.html?id=123788>
-
-=item *
-
-Retain binary compatibility across plain and DEBUGGING perl builds.
-L<[perl #127212]|https://rt.perl.org/Ticket/Display.html?id=127212>
-
-=item *
-
-Avoid leaking memory when setting C<$ENV{foo}> on darwin.
-L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
-
-=item *
-
-C</...\G/> no longer crashes on utf8 strings. When C<\G> is a fixed number
-of characters from the start of the regex, perl needs to count back that
-many characters from the current C<pos()> position and start matching from
-there. However, it was counting back bytes rather than characters, which
-could lead to panics on utf8 strings.
-
-=item *
-
-In some cases operators that return integers would return negative
-integers as large positive integers.
-L<[perl #126635]|https://rt.perl.org/Ticket/Display.html?id=126635>
-
-=item *
-
-The C<pipe()> operator would assert for DEBUGGING builds instead of
-producing the correct error message. The condition asserted on is
-detected and reported on correctly without the assertions, so the
-assertions were removed.
-L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480>
-
-=item *
-
-In some cases, failing to parse a here-doc would attempt to use freed
-memory. This was caused by a pointer not being restored correctly.
-L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443>
-
-=item *
-
-C<< @x = sort { *a = 0; $a <=> $b } 0 .. 1 >> no longer frees the GP
-for *a before restoring its SV slot.
-L<[perl #124097]|https://rt.perl.org/Ticket/Display.html?id=124097>
-
-=item *
-
-Multiple problems with the new hexadecimal floating point printf
-format C<%a> were fixed:
-L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>,
-L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>,
-L<[perl #126822]|https://rt.perl.org/Ticket/Display.html?id=126822>
-
-=item *
-
-Calling mg_set() in leave_scope() no longer leaks.
-
-=item *
-
-A regression from Perl v5.20 was fixed in which debugging output of regular
-expression compilation was wrong. (The pattern was correctly compiled, but
-what got displayed for it was wrong.)
-
-=item *
-
-C<\b{sb}> works much better. In Perl v5.22.0, this new construct didn't
-seem to give the expected results, yet passed all the tests in the
-extensive suite furnished by Unicode. It turns out that it was because
-these were short input strings, and the failures had to do with longer
-inputs. This was fixed in Perl 5.23.4, but the improvement was not
-noticed until after that was released, so is included here now.
-
-=item *
-
-Certain syntax errors in
-L<perlrecharclass/Extended Bracketed Character Classes> caused panics
-instead of the proper error message. This has now been fixed. [perl
-#126481]
-
-=item *
-
-An earlier commit added a message when a quantifier in a regular
-expression was useless, but then caused the parser to skip it;
-this caused the surplus quantifier to be silently ignored, instead
-of throwing an error. This is now fixed. [perl #126253]
-
-=item *
-
-The switch to building non-XS modules last in win32/makefile.mk (introduced
-by design as part of the changes to enable parallel building) caused the
-build of POSIX to break due to problems with the version module. This
-is now fixed.
-
-=item *
-
-Improved parsing of hex float constants.
-
-=item *
-
-Fixed an issue with C<< pack >> where C<< pack "H" >> (and C<< pack "h" >>)
-could read past the source when given a non-utf8 source, and a utf8 target.
-[perl #126325]
-
-=item *
-
-Fixed several cases where perl would abort due to a segmentation fault,
-or a C-level assert. [perl #126615], [perl #126602], [perl #126193].
-
-=item *
-
-There were places in regular expression patterns where comments (C<(?#...)>)
-weren't allowed, but should have been. This is now fixed.
-L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639>
-
-=item *
-
-Some regressions from Perl 5.20 have been fixed, in which some syntax errors in
-L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
-within regular expression patterns could cause a segfault instead of a proper
-error message.
-L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
-L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404>
-
-=item *
-
-Another problem with
-L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes>
-constructs has been fixed wherein things like C<\c]> could cause panics.
-L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181>
-
-=item *
-
-Some problems with attempting to extend the perl stack to around 2G or 4G
-entries have been fixed. This was particularly an issue on 32-bit perls built
-to use 64-bit integers, and was easily noticeable with the list repetition
-operator, e.g.
-
- @a = (1) x $big_number
-
-Formerly perl may have crashed, depending on the exact value of C<$big_number>;
-now it will typically raise an exception.
-L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937>
-
-=item *
-
-In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if
-the condition is C<(?!)> then perl failed the match outright instead of
-matching the no-pattern. This has been fixed.
-L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222>
-
-=item *
-
-The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional
-argument and set C<REGERROR>/C<REGMARK> appropriately as well.
-L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186>
-
-=item *
-
-Several bugs, including a segmentation fault, have been fixed with the bounds
-checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
-C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty
-string; none of the C<\b{}> ones do.
-L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
-
-=item *
-
-Duplicating a closed file handle for write no longer creates a
-filename of the form F<GLOB(0xXXXXXXXX)>. [perl #125115]
-
-=item *
-
-Warning fatality is now ignored when rewinding the stack. This
-prevents infinite recursion when the now fatal error also causes
-rewinding of the stack. [perl #123398]
-
-=item *
-
-In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C
-option, such that the successfully parsed number was not saved as the option
-value if it parsed to the end of the argument. [perl #125381]
-
-=item *
-
-The PadlistNAMES macro is an lvalue again.
-
-=item *
-
-Zero -DPERL_TRACE_OPS memory for sub-threads.
-
-perl_clone_using() was missing Zero init of PL_op_exec_cnt[]. This
-caused sub-threads in threaded -DPERL_TRACE_OPS builds to spew exceedingly
-large op-counts at destruct. These counts would print %x as "ABABABAB",
-clearly a mem-poison value.
-
-=item *
-
-A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *>
-or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These
-particular typemap entries are thought to be extremely rarely used by XS
-modules. [perl #124181]
-
-=item *
-
-C<alarm()> and C<sleep()> will now warn if the argument is a negative number
-and return undef. Previously they would pass the negative value to the
-underlying C function which may have set up a timer with a surprising value.
-
-=item *
-
-Perl can again be compiled with any Unicode version. This used to
-(mostly) work, but was lost in v5.18 through v5.20. The property
-C<Name_Alias> did not exist prior to Unicode 5.0. L<Unicode::UCD>
-incorrectly said it did. This has been fixed.
-
-=item *
-
-Very large code-points (beyond Unicode) in regular expressions no
-longer cause a buffer overflow in some cases when converted to UTF-8.
-L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826>
-
-=item *
-
-The integer overflow check for the range operator (...) in list
-context now correctly handles the case where the size of the range is
-larger than the address space. This could happen on 32-bits with
--Duse64bitint.
-L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781>
-
-=item *
-
-A crash with C<< %::=(); J->${\"::"} >> has been fixed.
-L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
-
-=item *
-
-C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead.
-[perl #125805]
-
-=item *
-
-Regular expression possessive quantifier v5.20 regression now fixed.
-C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically
-to C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since v5.20, this didn't
-work if I<min> and I<max> were equal. [perl #125825]
-
-=item *
-
-C<< BEGIN <> >> no longer segfaults and properly produces an error
-message. [perl #125341]
-
-=item *
-
-In C<tr///> an illegal backwards range like C<tr/\x{101}-\x{100}//> was
-not always detected, giving incorrect results. This is now fixed.
-
-=back
-
-=head1 Acknowledgements
-
-[ XXX: generate this just in time, Ricardo! ]
-
-=head1 Reporting Bugs
-
-If you find what you think is a bug, you might check the articles recently
-posted to the comp.lang.perl.misc newsgroup and the perl bug database at
-https://rt.perl.org/ . There may also be information at
-http://www.perl.org/ , the Perl Home Page.
-
-If you believe you have an unreported bug, please run the L<perlbug> program
-included with your release. Be sure to trim your bug down to a tiny but
-sufficient test case. Your bug report, along with the output of C<perl -V>,
-will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
-
-If the bug you are reporting has security implications, which make it
-inappropriate to send to a publicly archived mailing list, then please send it
-to perl5-security-report@perl.org. This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who will be
-able to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported. Please only use this address for
-security issues in the Perl core, not for modules independently distributed on
-CPAN.
-
-=head1 SEE ALSO
-
-The F<Changes> file for an explanation of how to view exhaustive details on
-what changed.
-
-The F<INSTALL> file for how to build Perl.
-
-The F<README> file for general stuff.
-
-The F<Artistic> and F<Copying> files for copyright information.
-
-=cut
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 4dcc7af6f5..e0ae30f4f4 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -2,166 +2,591 @@
=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.23.10
+perldelta - what is new for perl v5.24.0
=head1 DESCRIPTION
-This document describes differences between the 5.23.9 release and the 5.23.10
-release.
+This document describes the differences between the 5.22.0 release and the
+5.24.0 release.
-If you are upgrading from an earlier release such as 5.23.8, first read
-L<perl5239delta>, which describes differences between 5.23.8 and 5.23.9.
+=head1 Core Enhancements
-=head1 Notice
+=head2 Postfix dereferencing is no longer experimental
-XXX Any important notices here
+Using the C<postderef> and C<postderef_qq> features no longer emits a
+warning. Existing code that disables the C<experimental::postderef> warning
+category that they previously used will continue to work. The C<postderef>
+feature has no effect; all Perl code can use postfix dereferencing,
+regardless of what feature declarations are in scope. The C<5.24> feature
+bundle now includes the C<postderef_qq> feature.
-=head1 Core Enhancements
+=head2 Unicode 8.0 is now supported
+
+For details on what is in this release, see
+L<http://www.unicode.org/versions/Unicode8.0.0/>.
+
+=head2 perl will now croak when closing an in-place output file fails
+
+Until now, failure to close the output file for an in-place edit was not
+detected, meaning that the input file could be clobbered without the edit being
+successfully completed. Now, when the output file cannot be closed
+successfully, an exception is raised.
+
+=head2 New C<\b{lb}> boundary in regular expressions
+
+C<lb> stands for Line Break. It is a Unicode property
+that determines where a line of text is suitable to break (typically so
+that it can be output without overflowing the available horizontal
+space). This capability has long been furnished by the
+L<Unicode::LineBreak> module, but now a light-weight, non-customizable
+version that is suitable for many purposes is in core Perl.
+
+=head2 C<qr/(?[ ])/> now works in UTF-8 locales
+
+L<Extended Bracketed Character Classes|perlrecharclass/Extended Bracketed Character Classes>
+now will successfully compile when S<C<use locale>> is in effect. The compiled
+pattern will use standard Unicode rules. If the runtime locale is not a
+UTF-8 one, a warning is raised and standard Unicode rules are used
+anyway. No tainting is done since the outcome does not actually depend
+on the locale.
+
+=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined
+
+Negative shifts are reverse shifts: left shift becomes right shift,
+and right shift becomes left shift.
+
+Shifting by the number of bits in a native integer (or more) is zero,
+except when the "overshift" is right shifting a negative value under
+C<use integer>, in which case the result is -1 (arithmetic shift).
+
+Until now negative shifting and overshifting have been undefined
+because they have relied on whatever the C implementation happens
+to do. For example, for the overshift a common C behavior is
+"modulo shift":
+
+ 1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior.
+
+ # And the same for <<, while Perl now produces 0 for both.
+
+Now these behaviors are well-defined under Perl, regardless of what
+the underlying C implementation does. Note, however, that you cannot
+escape the native integer width, you need to know how far left you
+can go. You can use for example:
+
+ use Config;
+ my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3.
+
+If you need a more bits on the left shift, you can use for example
+the C<bigint> pragma, or the C<Bit::Vector> module from CPAN.
+
+=head2 printf and sprintf now allow reordered precision arguments
+
+That is, C<< sprintf '|%.*2$|', 2, 3 >> now returns C<|002|>. This extends
+the existing reordering mechanism (which allows reordering for arguments
+that are used as format fields, widths, and vector separators).
-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 More fields provided to C<sigaction> callback with C<SA_SIGINFO>
-[ List each enhancement as a =head2 entry ]
+When passing the C<SA_SIGINFO> flag to L<sigaction|POSIX/sigaction>, the
+C<errno>, C<status>, C<uid>, C<pid>, C<addr> and C<band> fields are now
+included in the hash passed to the handler, if supported by the
+platform.
=head1 Security
-XXX Any security-related notices go here. In particular, any security
-vulnerabilities closed should be noted here rather than in the
-L</Selected Bug Fixes> section.
+=head2 Set proper umask before calling C<mkstemp(3)>
-[ List each security issue as a =head2 entry ]
+In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)>
+and restoring it afterwards. This wrongfully tells open(2) to strip
+the owner read and write bits from the given mode before applying it,
+rather than the intended negation of leaving only those bits in place.
+
+Systems that use mode 0666 in C<mkstemp(3)> (like old versions of
+glibc) create a file with permissions 0066, leaving world read and
+write permissions regardless of current umask.
+
+This has been fixed by using umask 0177 instead. [perl #127322]
+
+=head2 fix out of boundary access in Win32 path handling
+
+This is CVE-2015-8608. For more information see
+L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755>
+
+=head2 fix loss of taint in canonpath
+
+This is CVE-2015-8607. For more information see
+L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862>
+
+=head2 Avoid accessing uninitialized memory in win32 C<crypt()>
+
+Added validation that will detect both a short salt and invalid characters
+in the salt.
+L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922>
+
+=head2 Remove duplicate environment variables from C<environ>
+
+Previously, if an environment variable appeared more than once in
+C<environ[]>, C<%ENV> would contain the last entry for that name,
+while a typical C<getenv()> would return the first entry. We now
+make sure C<%ENV> contains the same as what C<getenv> returns.
+
+Second, we remove duplicates from C<environ[]>, so if a setting
+with that name is set in C<%ENV> we won't pass an unsafe value
+to a child process.
+
+[CVE-2016-2381]
=head1 Incompatible Changes
-XXX For a release on a stable branch, this section aspires to be:
+=head2 The C<autoderef> feature has been removed
+
+The experimental C<autoderef> feature (which allowed calling C<push>,
+C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on
+a scalar argument) has been deemed unsuccessful. It has now been removed;
+trying to use the feature (or to disable the C<experimental::autoderef>
+warning it previously triggered) now yields an exception.
+
+=head2 Lexical $_ has been removed
+
+C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion
+with no obvious solution. In Perl 5.18.0, it was made experimental on the
+theory that it would either be removed or redesigned in a less confusing (but
+backward-incompatible) way. Over the following years, no alternatives were
+proposed. The feature has now been removed and will fail to compile.
+
+=head2 C<qr/\b{wb}/> is now tailored to Perl expectations
+
+This is now more suited to be a drop-in replacement for plain C<\b>, but
+giving better results for parsing natural language. Previously it
+strictly followed the current Unicode rules which calls for it to match
+between each white space character. Now it doesn't generally match
+within spans of white space, behaving like C<\b> does. See
+L<perlrebackslash/\b{wb}>
+
+=head2 Regular expression compilation errors
+
+Some regular expression patterns that had runtime errors now
+don't compile at all.
+
+Almost all Unicode properties using the C<\p{}> and C<\P{}> regular
+expression pattern constructs are now checked for validity at pattern
+compilation time, and invalid ones will cause the program to not
+compile. In earlier releases, this check was often deferred until run
+time. Whenever an error check is moved from run- to compile time,
+erroneous code is caught 100% of the time, whereas before it would only
+get caught if and when the offending portion actually gets executed,
+which for unreachable code might be never.
- 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<qr/\N{}/> now disallowed under C<use re "strict">
-[ List each incompatible change as a =head2 entry ]
+An empty C<\N{}> makes no sense, but for backwards compatibility is
+silently accepted as doing nothing. But now this is a fatal error under
+the experimental feature L<re/'strict' mode>.
+
+=head2 Nested declarations are now disallowed
+
+A C<my>, C<our>, or C<state> declaration is no longer allowed inside
+of another C<my>, C<our>, or C<state> declaration.
+
+For example, these are now fatal:
+
+ my ($x, my($y));
+ our (my $x);
+
+L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587>
+
+L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058>
+
+=head2 The C</\C/> character class has been removed.
+
+This regular expression character class was deprecated in v5.20.0 and has
+produced a deprecation warning since v5.22.0. It is now a compile-time
+error. If you need to examine the individual bytes that make up a
+UTF8-encoded character, then use C<utf8::encode()> on the string (or a
+copy) first.
+
+=head2 C<chdir('')> no longer chdirs home
+
+Using C<chdir('')> or C<chdir(undef)> to chdir home has been deprecated since
+perl v5.8, and will now fail. Use C<chdir()> instead.
+
+=head2 ASCII characters in variable names must now be all visible
+
+It was legal until now on ASCII platforms for variable names to contain
+non-graphical ASCII control characters (ordinals 0 through 31, and 127,
+which are the C0 controls and C<DELETE>). This usage has been
+deprecated since v5.20, and as of now causes a syntax error. The
+variables these names referred to are special, reserved by Perl for
+whatever use it may choose, now, or in the future. Each such variable
+has an alternative way of spelling it. Instead of the single
+non-graphic control character, a two character sequence beginning with a
+caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>. Details are at
+L<perlvar>. It remains legal, though unwise and deprecated (raising a
+deprecation warning), to use certain non-graphic non-ASCII characters in
+variables names when not under S<C<use utf8>>. No code should do this,
+as all such variables are reserved by Perl, and Perl doesn't currently
+define any of them (but could at any time, without notice).
+
+=head2 An off by one issue in C<$Carp::MaxArgNums> has been fixed
+
+C<$Carp::MaxArgNums> is supposed to be the number of arguments to display.
+Prior to this version, it was instead showing C<$Carp::MaxArgNums> + 1 arguments,
+contrary to the documentation.
+
+=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
+
+The experimental Extended Bracketed Character Classes can contain regular
+bracketed character classes within them. These differ from regular ones in
+that white space is generally ignored, unless escaped by preceding it with a
+backslash. The white space that is ignored is now limited to just tab C<\t>
+and SPACE characters. Previously, it was any white space. See
+L<perlrecharclass/Extended Bracketed Character Classes>.
=head1 Deprecations
-=head2 \N{} with nothing between the braces is deprecated
+=head2 Using code points above the platform's C<IV_MAX> is now deprecated
+
+Unicode defines code points in the range C<0..0x10FFFF>. Some standards
+at one time defined them up to 2**31 - 1, but Perl has allowed them to
+be as high as anything that will fit in a word on the platform being
+used. However, use of those above the platform's C<IV_MAX> is broken in
+some constructs, notably C<tr///>, regular expression patterns involving
+quantifiers, and in some arithmetic and comparison operations, such as
+being the upper limit of a loop. Now the use of such code points raises
+a deprecation warning, unless that warning category is turned off.
+C<IV_MAX> is typically 2**31 -1 on 32-bit platforms, and 2**63-1 on
+64-bit ones.
+
+=head2 Doing bitwise operations on strings containing code points above
+0xFF is deprecated
+
+The string bitwise operators treat their operands as strings of bytes,
+and values beyond 0xFF are nonsensical in this context. To operate on
+encoded bytes, first encode the strings. To operate on code points'
+numeric values, use C<split> and C<map ord>. In the future, this
+warning will be replaced by an exception.
+
+=head2 sysread(), syswrite(), recv() and send() are deprecated on
+:utf8 handles
+
+The sysread(), recv(), syswrite() and send() operators
+are deprecated on handles that have the C<:utf8> layer, either
+explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
+
+Both sysread() and recv() currently use only the C<:utf8> flag for the
+stream, ignoring the actual layers. Since sysread() and recv() do no
+UTF-8 validation they can end up creating invalidly encoded scalars.
+
+Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
+ignoring any layers. If the flag is set, both write the value UTF-8
+encoded, even if the layer is some different encoding, such as the
+example above.
+
+Ideally, all of these operators would completely ignore the C<:utf8>
+state, working only with bytes, but this would result in silently
+breaking existing code. To avoid this a future version of perl will
+throw an exception when any of sysread(), recv(), syswrite() or send()
+are called on handle with the C<:utf8> layer.
-This had been illegal until v5.22, and will be illegal again in a future
-Perl version.
+=head1 Performance Enhancements
-=head2 Module removals
+=over 4
-XXX Remove this section if inapplicable.
+=item *
-The following modules will be removed from the core distribution in a
-future release, and will at that time need to be installed from CPAN.
-Distributions on CPAN which require these modules will need to list them as
-prerequisites.
+The overhead of scope entry and exit has been considerably reduced, so
+for example subroutine calls, loops and basic blocks are all faster now.
+This empty function call now takes about a third less time to execute:
-The core versions of these modules will now issue C<"deprecated">-category
-warnings to alert you to this fact. To silence these deprecation warnings,
-install the modules in question from CPAN.
+ sub f{} f();
-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.
+=item *
-=over
+Many languages, such as Chinese, are caseless. Perl now knows about
+most modern commercially important ones, and skips much of the work when
+a program tries to change case in them (like C<ucfirst()>) or match
+caselessly (C<qr//i>). This will speed up a program, such as a web
+server, that can operate on multiple languages, while operating on a
+caseless one.
-=item XXX
+=item *
+
+C</fixed-substr/> has been made much faster.
+
+On platforms with a libc memchr() implementation which makes good use of
+underlying hardware support, patterns which include fixed substrings will now
+often be much faster; for example with glibc on a recent x86_64 CPU, this:
+
+ $s = "a" x 1000 . "wxyz";
+ $s =~ /wxyz/ for 1..30000
+
+is now about 7 times faster. On systems with slow memchr(), e.g. 32-bit ARM
+Raspberry Pi, there will be a small or little speedup. Conversely, some
+pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3
+times slower on the rPi, 1.5x slower on x86_64.
+
+=item *
+
+Faster addition, subtraction and multiplication.
+
+Since 5.8.0, arithmetic became slower due to the need to support
+64-bit integers. To deal with 64-bit integers, a lot more corner
+cases need to be checked, which adds time. We now detect common
+cases where there is no need to check for those corner cases,
+and special-case them.
+
+=item *
+
+Preincrement, predecrement, postincrement, and postdecrement have been
+made faster by internally splitting the functions which handled multiple
+cases into different functions.
+
+=item *
+
+Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">)
+for XSUBs and const subs has been removed. This removed one glob/scalar combo
+for each unique C<.c> file that XSUBs and const subs came from. On startup
+(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created.
+Loading XS modules created more glob/scalar combos. These things were created
+regardless if the perl debugger was being used or not, unlike for pure perl
+subs, and ignores that the perl debugger can not debug C code.
+
+=item *
+
+On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not
+exist, is now 3.5x faster than before.
+
+=item *
-XXX Note that deprecated modules should be listed here even if they are listed
-as an updated module in the L</Modules and Pragmata> section.
+Single arguments in list assign are now slightly faster:
+
+ ($x) = (...);
+ (...) = ($x);
+
+=item *
+
+Less peak memory is now used when compiling regular expression patterns.
=back
-[ List each other deprecation as a =head2 entry ]
+=head1 Modules and Pragmata
-=head1 Performance Enhancements
+=head2 Updated Modules and Pragmata
+
+XXX: todo
-XXX Changes which enhance performance without changing behaviour go here.
-There may well be none in a stable release.
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
-[ List each enhancement as a =item entry ]
+=head3 L<perlapi>
=over 4
=item *
-XXX
+The process of using undocumented globals has been documented, namely, that one
+should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>
+first to get the go-ahead for documenting and using an undocumented function or
+global variable.
=back
-=head1 Modules and Pragmata
+=head3 L<perlcall>
-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.
+=over 4
-[ Within each section, list entries as a =item entry ]
+=item *
-=head2 New Modules and Pragmata
+A number of cleanups have been made to perlcall, including:
=over 4
=item *
-XXX
+use EXTEND(SP, n) and PUSHs() instead of XPUSHs() where applicable
+and update prose to match
+
+=item *
+
+add POPu, POPul and POPpbytex to the "complete list of POP macros"
+and clarify the documentation for some of the existing entries, and
+a note about side-effects
+
+=item *
+
+add API documentation for POPu and POPul
+
+=item *
+
+use ERRSV more efficiently
+
+=item *
+
+approaches to thread-safety storage of SVs.
=back
-=head2 Updated Modules and Pragmata
+=back
+
+=head3 L<perlfunc>
=over 4
=item *
-L<XXX> has been upgraded from version A.xx to B.yy.
+The documentation of C<hex> has been revised to clarify valid inputs.
+
+=item *
+
+Better explain meaning of negative PIDs in C<waitpid>.
+L<[perl #127080]|https://rt.perl.org/Ticket/Display.html?id=127080>
+
+=item *
+
+General cleanup: there's more consistency now (in POD usage, grammar, code
+examples), better practices in code examples (use of C<my>, removal of bareword
+filehandles, dropped usage of C<&> when calling subroutines, ...), etc.
=back
-=head2 Removed Modules and Pragmata
+=head3 L<perlguts>
=over 4
=item *
-XXX
+A new section has been added, L<perlguts/"Dynamic Scope and the Context
+Stack">, which explains how the perl context stack works.
=back
-=head1 Documentation
+=head3 L<perlmodlib>
-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>.
+=over 4
-=head2 New Documentation
+=item *
-XXX Changes which create B<new> files in F<pod/> go here.
+We now recommend contacting the module-authors list or PAUSE in seeking
+guidance on the naming of modules.
-=head3 L<XXX>
+=back
-XXX Description of the purpose of the new file here
+=head3 L<perlop>
-=head2 Changes to Existing Documentation
+=over 4
+
+=item *
+
+The documentation of C<qx//> now describes how C<$?> is affected.
+
+=back
+
+=head3 L<perlpolicy>
+
+=over 4
+
+=item *
+
+This note has been added to perlpolicy:
+
+ While civility is required, kindness is encouraged; if you have any doubt
+ about whether you are being civil, simply ask yourself, "Am I being kind?"
+ and aspire to that.
+
+=back
+
+=head3 L<perlreftut>
+
+=over 4
+
+=item *
+
+Fix some examples to be L<strict> clean.
+
+=back
+
+=head3 L<perlrebackslash>
+
+=over 4
+
+=item *
+
+Clarify that in languages like Japanese and Thai, dictionary lookup
+is required to determine word boundaries.
+
+=back
+
+=head3 L<perlsub>
+
+=over 4
+
+=item *
+
+Updated to note that anonymous subroutines can have signatures.
+
+=back
+
+=head3 L<perlsyn>
+
+=over 4
+
+=item *
-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.
+Fixed a broken example where C<=> was used instead of
+C<==> in conditional in do/while example.
-=head3 L<XXX>
+=back
+
+=head3 L<perltie>
=over 4
=item *
-XXX Description of the change here
+The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
+
+=back
+
+=head3 L<perlunicode>
+
+=over 4
+
+=item *
+
+Discourage use of 'In' prefix for Unicode Block property.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+The documentation of C<$@> was reworded to clarify that it is not just for
+syntax errors in C<eval>.
+L<[perl #124034]|https://rt.perl.org/Ticket/Display.html?id=124034>
+
+=item *
+
+The specific true value of C<$!{E...}> is now documented, noting that it is
+subject to change and not guaranteed.
+
+=item *
+
+Use of C<$OLD_PERL_VERSION> is now discouraged.
+
+=back
+
+=head3 L<perlxs>
+
+=over 4
+
+=item *
+
+The documentation of C<PROTOTYPES> has been corrected; they are I<disabled>
+by default, not I<enabled>.
=back
@@ -171,21 +596,65 @@ 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.
-
=head2 New Diagnostics
-XXX Newly added diagnostic messages go under here, separated into New Errors
-and New Warnings
-
=head3 New Errors
=over 4
=item *
-XXX L<message|perldiag/"message">
+L<%s must not be a named sequence in transliteration operator|perldiag/"%s must not be a named sequence in transliteration operator">
+
+(F) Transliteration (C<tr///> and C<y///>) transliterates individual
+characters. But a named sequence by definition is more than an
+individual charater, and hence doing this operation on it doesn't make
+sense.
+
+=item *
+
+L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/">
+
+=item *
+
+L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s"">
+
+(F) A "my", "our" or "state" declaration was found within another declaration,
+such as C<my ($x, my($y), $z)> or C<our (my $x)>.
+
+=item *
+
+L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/">
+
+=item *
+
+L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
+|perldiag/"Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>">
+
+=item *
+
+L<Illegal user-defined property name|perldiag/"Illegal user-defined property name">
+
+=item *
+
+L<Invalid number '%s' for -C option.|perldiag/"Invalid number '%s' for -C option.">
+
+(F) You supplied a number to the -C option that either has extra leading
+zeroes or overflows perl's unsigned integer representation.
+
+=item *
+
+L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
+
+=item *
+
+L<<< Sequence (?PE<lt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
+|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
+
+=item *
+
+L<Sequence (?PE<gt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
+|perldiag/"Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>">
=back
@@ -195,203 +664,1053 @@ XXX L<message|perldiag/"message">
=item *
-XXX L<message|perldiag/"message">
+L<Assuming NOT a POSIX class since %s in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|
+perldiag/Assuming NOT a POSIX class since %s in regex; marked by <-- HERE in mE<sol>%sE<sol>>
+
+=item *
+
+L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles">
+
+(W deprecated) The sysread(), recv(), syswrite() and send() operators
+are deprecated on handles that have the C<:utf8> layer, either
+explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
+
+Both sysread() and recv() currently use only the C<:utf8> flag for the
+stream, ignoring the actual layers. Since sysread() and recv() do no
+UTF-8 validation they can end up creating invalidly encoded scalars.
+
+Similarly, syswrite() and send() use only the C<:utf8> flag, otherwise
+ignoring any layers. If the flag is set, both write the value UTF-8
+encoded, even if the layer is some different encoding, such as the
+example above.
+
+Ideally, all of these operators would completely ignore the C<:utf8>
+state, working only with bytes, but this would result in silently
+breaking existing code. To avoid this a future version of perl will
+throw an exception when any of sysread(), recv(), syswrite() or send()
+are called on handle with the C<:utf8> layer.
=back
=head2 Changes to Existing Diagnostics
-XXX Changes (i.e. rewording) of diagnostic messages go here
-
=over 4
=item *
-XXX Describe change here
-
-=back
+Accessing the C<IO> part of a glob as C<FILEHANDLE> instead of C<IO> is no
+longer deprecated. It is discouraged to encourage uniformity (so that, for
+example, one can grep more easily) but it will not be removed.
+L<[perl #127060]|https://rt.perl.org/Ticket/Display.html?id=127060>
-=head1 Utility Changes
+=item *
-XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here.
-Most of these are built within the directory F<utils>.
+The diagnostic C<< Hexadecimal float: internal error >> has been changed to
+C<< Hexadecimal float: internal error (%s) >> to include more information.
-[ List utility changes as a =head2 entry for each utility and =item
-entries for each change
-Use L<XXX> with program names to get proper documentation linking. ]
+=item *
-=head2 L<XXX>
+L<Can't modify non-lvalue subroutine call of &%s|perldiag/"Can't modify non-lvalue subroutine call of &%s">
-=over 4
+This error now reports the name of the non-lvalue subroutine you attempted to
+use as an lvalue.
=item *
-XXX
+When running out of memory during an attempt the increase the stack
+size, previously, perl would die using the cryptic message
+C<< panic: av_extend_guts() negative count (-9223372036854775681) >>.
+This has been fixed to show the prettier message:
+L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" >>
=back
=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.
+=over 4
-[ List changes as a =item entry ].
+=item *
-=over 4
+C<Configure> now acts as if the C<-O> option is always passed, allowing command
+line options to override saved configuration. This should eliminate confusion
+when command line options are ignored for no obvious reason. C<-O> is now
+permitted, but ignored.
+
+=item *
+
+Bison 3.0 is now supported.
=item *
-XXX
+F<Configure> no longer probes for F<libnm> by default. Originally
+this was the "New Math" library, but the name has been re-used by the
+GNOME NetworkManager.
+L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131>
+
+=item *
+
+Added F<Configure> probes for C<newlocale>, C<freelocale>, and C<uselocale>.
+
+=item *
+
+C<< PPPort.so/PPPort.dll >> no longer get installed, as they are
+not used by C<< PPPort.pm >>, only by its test files.
+
+=item *
+
+It is now possible to specify which compilation date to show on
+C<< perl -V >> output, by setting the macro C<< PERL_BUILD_DATE >>.
+
+=item *
+
+Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
+C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
+the interpreter, since Perl 5.17.10. This has been fixed.
+
+=item *
+
+F<Configure> should handle spaces in paths a little better.
+
+=item *
+
+No longer generate EBCDIC POSIX-BC tables. We don't believe anyone is
+using Perl and POSIX-BC at this time, and by not generating these tables
+it saves time during development, and makes the resulting tar ball smaller.
+
+=item *
+
+The GNU Make makefile for Win32 now supports parallel builds. [perl #126632]
+
+=item *
+
+You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632]
+
+=item *
+
+The Win32 miniperl now has a real C<getcwd> which increases build performance
+resulting in C<getcwd()> being 605x faster in Win32 miniperl.
=back
=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 summarizing, although the bugs
-that they represent may be covered elsewhere.
+=over 4
-[ List each test improvement as a =item entry ]
+=item *
-=over 4
+A new test (F<t/op/aassign.t>) has been added to test the list assignment operator
+C<OP_AASSIGN>.
=item *
-XXX
+Parallel building has been added to the dmake C<makefile.mk> makefile. All
+Win32 compilers are supported.
=back
=head1 Platform Support
-XXX Any changes to platform support should be listed in the sections below.
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item AmigaOS
+
+The AmigaOS port has been reintegrated into the main tree, based off of
+Perl 5.22.1.
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
+=item Cygwin
-=head2 New Platforms
+Tests are more robust against unusual cygdrive prefixes.
+L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834>
-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.
+=item EBCDIC
=over 4
-=item XXX-some-platform
+=item UTF-EBCDIC extended
+
+UTF-EBCDIC is like UTF-8, but for EBCDIC platforms. It now has been
+extended so that it can represent code points up to 2 ** 64 - 1 on
+platforms with 64-bit words. This brings it into parity with UTF-8.
+This enhancement requires an incompatible change to the representation
+of code points in the range 2 ** 30 to 2 ** 31 -1 (the latter was the
+previous maximum representable code point). This means that a file that
+contains one of these code points, written out with previous versions of
+perl cannot be read in, without conversion, by a perl containing this
+change. We do not believe any such files are in existence, but if you
+do have one, submit a ticket at L<perlbug@perl.org|mailto:perlbug@perl.org>,
+and we will write a conversion script for you.
+
+=item EBCDIC C<cmp()> and C<sort()> fixed for UTF-EBCDIC strings
-XXX
+Comparing two strings that were both encoded in UTF-8 (or more
+precisely, UTF-EBCDIC) did not work properly until now. Since C<sort()>
+uses C<cmp()>, this fixes that as well.
+
+=item EBCDIC C<tr///> and C<y///> fixed for C<\N{}>, and C<S<use utf8>> ranges
+
+Perl v5.22 introduced the concept of portable ranges to regular
+expression patterns. A portable range matches the same set of
+characters no matter what platform is being run on. This concept is now
+extended to C<tr///>. See
+C<L<trE<sol>E<sol>E<sol>|perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>>.
+
+There were also some problems with these operations under S<C<use
+utf8>>, which are now fixed
=back
-=head2 Discontinued Platforms
+=item FreeBSD
-XXX List any platforms that this version of perl no longer compiles on.
+=over
-=over 4
+=item *
+
+Use the C<fdclose()> function from FreeBSD if it is available.
+L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847>
+
+=back
+
+=item IRIX
-=item XXX-some-platform
+=over
+
+=item *
+
+Under some circumstances IRIX stdio fgetc() and fread() set the errno to
+C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno
+is now cleared in such cases.
+L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
+
+=item *
-XXX
+Problems when multiplying long doubles by infinity have been fixed.
+L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
=back
-=head2 Platform-Specific Notes
+=item MacOS X
-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
-=over 4
+=item *
-=item XXX-some-platform
+Until now OS X builds of perl have specified a link target of 10.3 (Panther,
+2003) but have not specified a compiler target. From now on, builds of perl on
+OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X
+version and specify that as the explicit build target in both compiler and
+linker flags, thus preserving binary compatibility for extensions built later
+regardless of changes in OS X, SDK, or compiler and linker versions. To
+override the default value used in the build and preserved in the flags,
+specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building
+perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or
+earlier there is no change to the behavior present when those systems were
+current; the link target is still OS X 10.3 and there is no explicit compiler
+target.
-XXX
+=item *
+
+Builds with both -DDEBUGGING and threading enabled would fail with a
+"panic: free from wrong pool" error when built or tested from Terminal
+on OS X. This was caused by perl's internal management of the
+environment conflicting with an atfork handler using the libc
+setenv() function to update the environment.
+
+Perl now uses setenv()/unsetenv() to update the environment on OS X.
+L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
=back
-=head1 Internal Changes
+=item Solaris
-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.
+All Solaris now builds shared libperl.
-[ List each change as a =item entry ]
+Solaris and variants like OpenIndiana now always build with the shared
+Perl library (Configure -Duseshrplib). This was required for the
+OpenIndiana builds, but this has also been the setting for Oracle/Sun
+Perl builds for several years.
-=over 4
+=item Tru64
+
+Workaround where Tru64 balks when prototypes are listed as
+C<< PERL_STATIC_INLINE >>, but where the test is build with
+C<< -DPERL_NO_INLINE_FUNCTIONS >>.
+
+=item VMS
+
+=over
+
+=item *
+
+On VMS, the math function prototypes in C<math.h> are now visible under C++.
+Now building the POSIX extension with C++ will no longer crash.
+
+=item *
+
+VMS has had C<setenv/unsetenv> since v7.0 (released in 1996), C<Perl_vmssetenv>
+now always uses C<setenv/unsetenv>.
+
+=item *
+
+Perl now implements its own C<killpg> by scanning for processes in the
+specified process group, which may not mean exactly the same thing as a Unix
+process group, but allows us to send a signal to a parent (or master) process
+and all of its sub-processes. At the perl level, this means we can now send a
+negative pid like so:
+
+ kill SIGKILL, -$pid;
+
+to signal all processes in the same group as C<$pid>.
=item *
-XXX
+For those C<%ENV> elements based on the CRTL environ array, we've always
+preserved case when setting them but did look-ups only after upcasing the
+key first, which made lower- or mixed-case entries go missing. This problem
+has been corrected by making C<%ENV> elements derived from the environ array
+case-sensitive on look-up as well as case-preserving on store.
+
+=item *
+
+Environment look-ups for C<PERL5LIB> and C<PERLLIB> previously only
+considered logical names, but now consider all sources of C<%ENV> as
+determined by C<PERL_ENV_TABLES> and as documented in L<perlvms/%ENV>.
+
+=item *
+
+The minimum supported version of VMS is now v7.3-2, released in 2003. As a
+side effect of this change, VAX is no longer supported as the terminal
+release of OpenVMS VAX was v7.3 in 2001.
=back
-=head1 Selected Bug Fixes
+=item Win32
-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>.
+=over
-[ List each fix as a =item entry ]
+=item *
-=over 4
+A new build option C<USE_NO_REGISTRY> has been added to the makefiles. This
+option is off by default, meaning the default is to do Windows registry
+lookups. This option stops Perl from looking inside the registry for anything.
+For what values are looked up in the registry see L<perlwin32>. Internally, in
+C, the name of this option is C<WIN32_NO_REGISTRY>.
=item *
-A race condition which occurred when computing C<"$!"> with threads
-activated has been fixed. This showed up only on Darwin platforms. A
-related problem on Cygwin platforms involving UTF-8 strings has also
-been fixed. [perl #127708]
+The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and
+C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV>
+vars starting with C<PERL> has changed. Previously, the 2 keys were checked
+for entries at all times through Perl processes life time even if they did not
+exist. For performance reasons, now, if the root key (i.e.
+C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does
+not exist at process start time, it will not be checked again for C<%ENV>
+override entries for the remainder of the Perl processes life. This more
+closely matches Unix behaviour in that the environment is copied or inherited
+on startup and changing the variable in the parent process or another process
+or editing F<.bashrc> will not change the environmental variable in other
+existing, running, processes.
+
+=item *
+
+One glob fetch was removed for each C<-X> or C<stat> call whether done from
+Perl code or internally from Perl's C code. The glob being looked up was
+C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and
+C<stat> slightly faster.
+
+=item *
+
+During miniperl's process startup, during the build process, 4 to 8 IO calls
+related to the process starting F<.pl> and the F<buildcustomize.pl> file were
+removed from the code opening and executing the first 1 or 2 F<.pl> files.
+
+=item *
+
+Builds using Microsoft Visual C++ 2003 and earlier no longer produce
+an "INTERNAL COMPILER ERROR" message. [perl #126045]
+
+=item *
+
+Visual C++ 2013 builds will now execute on XP and higher. Previously they would
+only execute on Vista and higher.
+
+=item *
+
+You can now build perl with GNU Make and GCC. [perl #123440]
+
+=item *
+
+C<truncate($filename, $size)> now works for files over 4GB in size.
+[perl #125347]
+
+=item *
+
+Parallel building has been added to the dmake C<makefile.mk> makefile. All
+Win32 compilers are supported.
+
+=item *
+
+Building a 64-bit perl with a 64-bit GCC but a 32-bit gmake would
+result in an invalid C<$Config{archname}> for the resulting perl.
+[perl #127584]
+
+=item *
+
+Errors set by Winsock functions are now put directly into C<$^E>, and the
+relevant C<WSAE*> error codes are now exported from the L<Errno> and L<POSIX>
+modules for testing this against.
+
+The previous behaviour of putting the errors (converted to POSIX-style C<E*>
+error codes since Perl 5.20.0) into C<$!> was buggy due to the non-equivalence
+of like-named Winsock and POSIX error constants, a relationship between which
+has unfortunately been established in one way or another since Perl 5.8.0.
+
+The new behaviour provides a much more robust solution for checking Winsock
+errors in portable software without accidentally matching POSIX tests that were
+intended for other OSes and may have different meanings for Winsock.
+
+The old behaviour is currently retained, warts and all, for backwards
+compatibility, but users are encouraged to change any code that tests C<$!>
+against C<E*> constants for Winsock errors to instead test C<$^E> against
+C<WSAE*> constants. After a suitable deprecation period, the old behaviour may
+be removed, leaving C<$!> unchanged after Winsock function calls, to avoid any
+possible confusion over which error variable to check.
+
+=back
+
+=item ppc64el floating point
+
+The floating point format of ppc64el (Debian naming for little-endian
+PowerPC) is now detected correctly.
=back
-=head1 Known Problems
+=head1 Internal Changes
-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. Unfixed
-platform specific bugs also go here.
+=over 4
-[ List each fix as a =item entry ]
+=item *
+
+The implementation of perl's context stack system, and its internal API,
+have been heavily reworked. Note that no significant changes have been
+made to any external APIs, but XS code which relies on such internal
+details may need to be fixed. The main changes are:
=over 4
=item *
-XXX
+The C<PUSHBLOCK()>, C<POPSUB()> etc. macros have been replaced with static
+inline functions such as C<cx_pushblock()>, C<cx_popsub()> etc. These use
+function args rather than implicitly relying on local vars such as
+C<gimme> and C<newsp> being available. Also their functionality has
+changed: in particular, C<cx_popblock()> no longer decrements
+C<cxstack_ix>. The ordering of the steps in the C<pp_leave*> functions
+involving C<cx_popblock()>, C<cx_popsub()> etc. has changed. See the new
+documentation, L<perlguts/"Dynamic Scope and the Context Stack">, for
+details on how to use them.
+
+=item *
+
+Various macros, which now consistently have a CX_ prefix, have been added:
+
+ CX_CUR(), CX_LEAVE_SCOPE(), CX_POP()
+
+or renamed:
+
+ CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST()
+
+=item *
+
+C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so
+C<pp_enter*> and C<pp_leave*> no longer do
+
+ ENTER; SAVETMPS; ....; LEAVE
+
+=item *
+
+C<cx_popblock()> now also restores C<PL_curpm>.
+
+=item *
+
+In C<dounwind()> for every context type, the current savestack frame is
+now processed before each context is popped; formerly this was only done
+for sub-like context frames. This action has been removed from
+C<cx_popsub()> and placed into its own macro, C<CX_LEAVE_SCOPE(cx)>, which
+must be called before C<cx_popsub()> etc.
+
+C<dounwind()> now also does a C<cx_popblock()> on the last popped frame
+(formerly it only did the C<cx_popsub()> etc. actions on each frame).
+
+=item *
+
+The temps stack is now freed on scope exit; previously, temps created
+during the last statement of a block wouldn't be freed until the next
+C<nextstate> following the block (apart from an existing hack that did
+this for recursive subs in scalar context); and in something like
+C<f(g())>, the temps created by the last statement in C<g()> would
+formerly not be freed until the statement following the return from
+C<f()>.
+
+=item *
+
+Most values that were saved on the savestack on scope entry are now
+saved in suitable new fields in the context struct, and saved and
+restored directly by C<cx_pushfoo()> and C<cx_popfoo()>, which is much
+faster.
+
+=item *
+
+Various context struct fields have been added, removed or modified.
+
+=item *
+
+The handling of C<@_> in C<cx_pushsub()> and C<cx_popsub()> has been
+considerably tidied up, including removing the C<argarray> field from the
+context struct, and extracting out some common (but rarely used) code into
+a separate function, C<clear_defarray()>. Also, useful subsets of
+C<cx_popsub()> which had been unrolled in places like C<pp_goto> have been
+gathered into the new functions C<cx_popsub_args()> and
+C<cx_popsub_common()>.
+
+=item *
+
+C<pp_leavesub> and C<pp_leavesublv> now use the same function as the rest
+of the C<pp_leave*>'s to process return args.
+
+=item *
+
+C<CXp_FOR_PAD> and C<CXp_FOR_GV> flags have been added, and
+C<CXt_LOOP_FOR> has been split into C<CXt_LOOP_LIST>, C<CXt_LOOP_ARY>.
+
+=item *
+
+Some variables formerly declared by C<dMULTICALL> (but not documented) have
+been removed.
=back
-=head1 Errata From Previous Releases
+=item *
-=over 4
+The obscure C<PL_timesbuf> variable, effectively a vestige of Perl 1, has
+been removed. It was documented as deprecated in Perl 5.20, with a statement
+that it would be removed early in the 5.21.x series; that has now finally
+happened.
+L<[perl #121351]|https://rt.perl.org/Ticket/Display.html?id=121351>
+
+=item *
+
+Remove unwarranted assertion in C<Perl_newATTRSUB_x()>. If a stub subroutine
+definition with a prototype has been seen, then any subsequent stub (or
+definition) of the same subroutine with an attribute was causing an assertion
+failure because of a null pointer.
+L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845>
+
+=item *
+
+Replace C<::> with C<__> in C<ExtUtils::ParseXS> like it's done for
+parameters/return values. This is more consistent, and simplifies writing XS
+code wrapping C++ classes into a nested Perl namespace (it requires only
+a typedef for C<Foo__Bar> rather than two, one for C<Foo_Bar> and the other
+for C<Foo::Bar>).
+
+=item *
+
+Deprecate the C<to_utf8_case()> function, see
+L<http://nntp.perl.org/group/perl.perl5.porters/233287>.
+
+=item *
+
+Perl core code and the threads extension have been annotated so that,
+if Perl is configured to use threads, then during compile-time clang (3.6
+or later) will warn about suspicious uses of mutexes.
+See L<http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more
+information.
+
+=item *
+
+The C<signbit()> emulation has been enhanced. This will help older
+and/or more exotic platforms or configurations.
=item *
-XXX Add anything here that we forgot to add, or were mistaken about, in
-the perldelta of a previous release.
+The C<to_utf8_case> function is discouraged in favor of C<toUPPER_utf8>,
+C<toTITLE_utf8>, C<toLOWER_utf8>, and C<toFOLD_utf8>.
+
+=item *
+
+EBCDIC code paths have largely been unified to avoid repetition.
+
+=item *
+
+MSWin32 code for C<$^X> has been moved out of the F<win32> directory to
+F<caretx.c>, where other operating systems set that variable.
+
+=item *
+
+C<< sv_ref() >> is now part of the API.
+
+=item *
+
+L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>. It
+previously has always returned C<0> since Perl 5.000 stable but that was
+undocumented. Although C<sv_backoff> is marked as public API, XS code is not
+expected to be impacted since the proper API call would be through public API
+C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public
+C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a
+meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>.
+
+=item *
+
+The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues
+with integer truncation and wrapping. In particular, some casts formerly used
+within the macros have been removed. This means for example that passing an
+unsigned nitems argument is likely to raise a compiler warning now (it's always
+been documented to require a signed value; formerly int, lately SSize_t).
+
+=item *
+
+C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed.
+
+=item *
+
+C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed.
=back
-=head1 Obituary
+=head1 Selected Bug Fixes
-XXX If any significant core contributor has died, we've added a short obituary
-here.
+=over 4
-=head1 Acknowledgements
+=item *
+
+It now works properly to specify a user-defined property, such as
+
+ qr/\p{mypkg1::IsMyProperty}/i
+
+with C</i> caseless matching, an explicit package name, and
+I<IsMyProperty> not defined at the time of the pattern compilation.
+
+=item *
+
+Perl's memcpy(), memmove(), memset() and memcmp() fallbacks are now
+more compatible with the originals. [perl #127619]
+
+=item *
+
+Fixed the issue where a C<< s///r >>) with B<< -DPERL_NO_COW >> attempts
+to modify the source SV, resulting in the program dying. [perl #127635]
+
+=item *
+
+Fixed a spurious warning about posix character classes. [perl #127581]
+
+=item *
+
+Fixed an obscure case where a pattern could fail to match. This only
+occurred when matching characters from the set of C1 controls, when
+the target matched string was in UTF-8, and only on EBCDIC platforms.
+
+=item *
+
+Fixed over eager warnings for C<< /[.foo.]/ >>.
+
+This prevents Perl from warning about constructs like C<< /[.].*[.]/ >>.
+[perl #127582, #127604]
+
+=item *
+
+Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously,
+it assumed that if the filename (without the F<.pmc?> extension) differed
+from the package name, if was a misspelled use statement (i.e. C<use Strict>
+instead of C<use strict>). We now check whether there's really a
+miscapitalization happening, and not another issue.
+
+=item *
+
+Turn an assertion into a more user friendly failure when parsing
+regexes. [perl #127599]
+
+=item *
+
+Correctly raise an error when trying to compile patterns with
+unterminated character classes while there are trailing backslashes.
+[perl #126141].
+
+=item *
+
+Line numbers larger than 2**31-1 but less than 2**32 are no longer
+returned by caller() as negative numbers. [perl #126991]
+
+=item *
+
+C<< unless ( I<assignment> ) >> now properly warns when syntax
+warnings are enabled. [perl #127122]
+
+=item *
+
+Setting an C<ISA> glob to an array reference now properly adds
+C<isaelem> magic to any existing elements. Previously modifying such
+an element would not update the ISA cache, so method calls would call
+the wrong function. Perl would also crash if the C<ISA> glob was
+destroyed, since new code added in 5.23.7 would try to release the
+C<isaelem> magic from the elements. [perl #127351]
+
+=item *
+
+If a here-doc was found while parsing another operator, the parser had
+already read end of file, and the here-doc was not terminated, perl
+could produce an assertion or a segmentation fault. This now reliably
+complains about the unterminated here-doc. [perl #125540]
+
+=item *
+
+untie() would sometimes return the last value returned by the UNTIE()
+handler as well as it's normal value, messing up the stack. [perl
+#126621]
+
+=item *
+
+Fixed an operator precedence problem when C< castflags & 2> is true.
+[perl #127474]
+
+=item *
+
+Caching of DESTROY methods could result in a non-pointer or a
+non-STASH stored in the SvSTASH() slot of a stash, breaking the B
+STASH() method. The DESTROY method is now cached in the MRO metadata
+for the stash. [perl #126410]
+
+=item *
+
+The AUTOLOAD method is now called when searching for a DESTROY method,
+and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494]
+
+=item *
+
+Avoid parsing beyond the end of the buffer when processing a C<#line>
+directive with no filename. [perl #127334]
+
+=item *
+
+Perl now raises a warning when a regular expression pattern looks like
+it was supposed to contain a POSIX class, like C<qr/[[:alpha:]]/>, but
+there was some slight defect in its specification which causes it to
+instead be treated as a regular bracketed character class. An example
+would be missing the second colon in the above like this:
+C<qr/[[:alpha]]/>. This compiles to match a sequence of two characters.
+The second is C<"]">, and the first is any of: C<"[">, C<":">, C<"a">,
+C<"h">, C<"l">, or C<"p">. This is unlikely to be the intended
+meaning, and now a warning is raised. No warning is raised unless the
+specification is very close to one of the 14 legal POSIX classes. (See
+L<perlrecharclass/POSIX Character Classes>.)
+[perl #8904]
+
+=item *
+
+Certain regex patterns involving a complemented POSIX class in an
+inverted bracketed character class, and matching something else
+optionally would improperly fail to match. An example of one that could
+fail is C</qr/_?[^\Wbar]\x{100}/>. This has been fixed.
+[perl #127537]
+
+=item *
+
+Perl 5.22 added support to the C99 hexadecimal floating point notation,
+but sometimes misparses hex floats. This has been fixed.
+[perl #127183]
+
+=item *
+
+A regression that allowed undeclared barewords in hash keys to work despite
+strictures has been fixed.
+L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981>
+
+=item *
+
+Calls to the placeholder C<&PL_sv_yes> used internally when an C<import()>
+or C<unimport()> method isn't found now correctly handle scalar context.
+L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042>
+
+=item *
+
+Report more context when we see an array where we expect to see an
+operator and avoid an assertion failure.
+L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737>
+
+=item *
+
+Modifying an array that was previously a package C<@ISA> no longer
+causes assertion failures or crashes.
+L<[perl #123788]|https://rt.perl.org/Ticket/Display.html?id=123788>
+
+=item *
+
+Retain binary compatibility across plain and DEBUGGING perl builds.
+L<[perl #127212]|https://rt.perl.org/Ticket/Display.html?id=127212>
+
+=item *
+
+Avoid leaking memory when setting C<$ENV{foo}> on darwin.
+L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
+
+=item *
+
+C</...\G/> no longer crashes on utf8 strings. When C<\G> is a fixed number
+of characters from the start of the regex, perl needs to count back that
+many characters from the current C<pos()> position and start matching from
+there. However, it was counting back bytes rather than characters, which
+could lead to panics on utf8 strings.
+
+=item *
+
+In some cases operators that return integers would return negative
+integers as large positive integers.
+L<[perl #126635]|https://rt.perl.org/Ticket/Display.html?id=126635>
+
+=item *
+
+The C<pipe()> operator would assert for DEBUGGING builds instead of
+producing the correct error message. The condition asserted on is
+detected and reported on correctly without the assertions, so the
+assertions were removed.
+L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480>
+
+=item *
+
+In some cases, failing to parse a here-doc would attempt to use freed
+memory. This was caused by a pointer not being restored correctly.
+L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443>
+
+=item *
+
+C<< @x = sort { *a = 0; $a <=> $b } 0 .. 1 >> no longer frees the GP
+for *a before restoring its SV slot.
+L<[perl #124097]|https://rt.perl.org/Ticket/Display.html?id=124097>
+
+=item *
+
+Multiple problems with the new hexadecimal floating point printf
+format C<%a> were fixed:
+L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>,
+L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>,
+L<[perl #126822]|https://rt.perl.org/Ticket/Display.html?id=126822>
+
+=item *
+
+Calling mg_set() in leave_scope() no longer leaks.
+
+=item *
+
+A regression from Perl v5.20 was fixed in which debugging output of regular
+expression compilation was wrong. (The pattern was correctly compiled, but
+what got displayed for it was wrong.)
+
+=item *
+
+C<\b{sb}> works much better. In Perl v5.22.0, this new construct didn't
+seem to give the expected results, yet passed all the tests in the
+extensive suite furnished by Unicode. It turns out that it was because
+these were short input strings, and the failures had to do with longer
+inputs. This was fixed in Perl 5.23.4, but the improvement was not
+noticed until after that was released, so is included here now.
+
+=item *
+
+Certain syntax errors in
+L<perlrecharclass/Extended Bracketed Character Classes> caused panics
+instead of the proper error message. This has now been fixed. [perl
+#126481]
+
+=item *
+
+An earlier commit added a message when a quantifier in a regular
+expression was useless, but then caused the parser to skip it;
+this caused the surplus quantifier to be silently ignored, instead
+of throwing an error. This is now fixed. [perl #126253]
+
+=item *
-XXX Generate this with:
+The switch to building non-XS modules last in win32/makefile.mk (introduced
+by design as part of the changes to enable parallel building) caused the
+build of POSIX to break due to problems with the version module. This
+is now fixed.
+
+=item *
+
+Improved parsing of hex float constants.
+
+=item *
+
+Fixed an issue with C<< pack >> where C<< pack "H" >> (and C<< pack "h" >>)
+could read past the source when given a non-utf8 source, and a utf8 target.
+[perl #126325]
+
+=item *
+
+Fixed several cases where perl would abort due to a segmentation fault,
+or a C-level assert. [perl #126615], [perl #126602], [perl #126193].
+
+=item *
+
+There were places in regular expression patterns where comments (C<(?#...)>)
+weren't allowed, but should have been. This is now fixed.
+L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639>
+
+=item *
+
+Some regressions from Perl 5.20 have been fixed, in which some syntax errors in
+L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
+within regular expression patterns could cause a segfault instead of a proper
+error message.
+L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
+L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404>
+
+=item *
+
+Another problem with
+L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes>
+constructs has been fixed wherein things like C<\c]> could cause panics.
+L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181>
+
+=item *
+
+Some problems with attempting to extend the perl stack to around 2G or 4G
+entries have been fixed. This was particularly an issue on 32-bit perls built
+to use 64-bit integers, and was easily noticeable with the list repetition
+operator, e.g.
+
+ @a = (1) x $big_number
+
+Formerly perl may have crashed, depending on the exact value of C<$big_number>;
+now it will typically raise an exception.
+L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937>
+
+=item *
+
+In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if
+the condition is C<(?!)> then perl failed the match outright instead of
+matching the no-pattern. This has been fixed.
+L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222>
+
+=item *
+
+The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional
+argument and set C<REGERROR>/C<REGMARK> appropriately as well.
+L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186>
+
+=item *
+
+Several bugs, including a segmentation fault, have been fixed with the bounds
+checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
+C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty
+string; none of the C<\b{}> ones do.
+L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
+
+=item *
+
+Duplicating a closed file handle for write no longer creates a
+filename of the form F<GLOB(0xXXXXXXXX)>. [perl #125115]
+
+=item *
+
+Warning fatality is now ignored when rewinding the stack. This
+prevents infinite recursion when the now fatal error also causes
+rewinding of the stack. [perl #123398]
+
+=item *
+
+In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C
+option, such that the successfully parsed number was not saved as the option
+value if it parsed to the end of the argument. [perl #125381]
+
+=item *
+
+The PadlistNAMES macro is an lvalue again.
+
+=item *
+
+Zero -DPERL_TRACE_OPS memory for sub-threads.
+
+perl_clone_using() was missing Zero init of PL_op_exec_cnt[]. This
+caused sub-threads in threaded -DPERL_TRACE_OPS builds to spew exceedingly
+large op-counts at destruct. These counts would print %x as "ABABABAB",
+clearly a mem-poison value.
+
+=item *
+
+A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *>
+or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These
+particular typemap entries are thought to be extremely rarely used by XS
+modules. [perl #124181]
+
+=item *
+
+C<alarm()> and C<sleep()> will now warn if the argument is a negative number
+and return undef. Previously they would pass the negative value to the
+underlying C function which may have set up a timer with a surprising value.
+
+=item *
+
+Perl can again be compiled with any Unicode version. This used to
+(mostly) work, but was lost in v5.18 through v5.20. The property
+C<Name_Alias> did not exist prior to Unicode 5.0. L<Unicode::UCD>
+incorrectly said it did. This has been fixed.
+
+=item *
+
+Very large code-points (beyond Unicode) in regular expressions no
+longer cause a buffer overflow in some cases when converted to UTF-8.
+L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826>
+
+=item *
+
+The integer overflow check for the range operator (...) in list
+context now correctly handles the case where the size of the range is
+larger than the address space. This could happen on 32-bits with
+-Duse64bitint.
+L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781>
+
+=item *
+
+A crash with C<< %::=(); J->${\"::"} >> has been fixed.
+L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
+
+=item *
+
+C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead.
+[perl #125805]
+
+=item *
+
+Regular expression possessive quantifier v5.20 regression now fixed.
+C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically
+to C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since v5.20, this didn't
+work if I<min> and I<max> were equal. [perl #125825]
+
+=item *
+
+C<< BEGIN <> >> no longer segfaults and properly produces an error
+message. [perl #125341]
+
+=item *
+
+In C<tr///> an illegal backwards range like C<tr/\x{101}-\x{100}//> was
+not always detected, giving incorrect results. This is now fixed.
+
+=back
+
+=head1 Acknowledgements
- perl Porting/acknowledgements.pl v5.23.9..HEAD
+[ XXX: generate this just in time, Ricardo! ]
=head1 Reporting Bugs
If you find what you think is a bug, you might check the articles recently
posted to the comp.lang.perl.misc newsgroup and the perl bug database at
-L<https://rt.perl.org/> . There may also be information at
-L<http://www.perl.org/> , the Perl Home Page.
+https://rt.perl.org/ . There may also be information at
+http://www.perl.org/ , the Perl Home Page.
If you believe you have an unreported bug, please run the L<perlbug> program
included with your release. Be sure to trim your bug down to a tiny but