summaryrefslogtreecommitdiffstats
path: root/upstream/fedora-rawhide/man1/perl5240delta.1
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/fedora-rawhide/man1/perl5240delta.1
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/fedora-rawhide/man1/perl5240delta.1')
-rw-r--r--upstream/fedora-rawhide/man1/perl5240delta.11628
1 files changed, 1628 insertions, 0 deletions
diff --git a/upstream/fedora-rawhide/man1/perl5240delta.1 b/upstream/fedora-rawhide/man1/perl5240delta.1
new file mode 100644
index 00000000..5600895d
--- /dev/null
+++ b/upstream/fedora-rawhide/man1/perl5240delta.1
@@ -0,0 +1,1628 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "PERL5240DELTA 1"
+.TH PERL5240DELTA 1 2024-01-25 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+perl5240delta \- what is new for perl v5.24.0
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This document describes the differences between the 5.22.0 release and the
+5.24.0 release.
+.SH "Core Enhancements"
+.IX Header "Core Enhancements"
+.SS "Postfix dereferencing is no longer experimental"
+.IX Subsection "Postfix dereferencing is no longer experimental"
+Using the \f(CW\*(C`postderef\*(C'\fR and \f(CW\*(C`postderef_qq\*(C'\fR features no longer emits a
+warning. Existing code that disables the \f(CW\*(C`experimental::postderef\*(C'\fR warning
+category that they previously used will continue to work. The \f(CW\*(C`postderef\*(C'\fR
+feature has no effect; all Perl code can use postfix dereferencing,
+regardless of what feature declarations are in scope. The \f(CW5.24\fR feature
+bundle now includes the \f(CW\*(C`postderef_qq\*(C'\fR feature.
+.SS "Unicode 8.0 is now supported"
+.IX Subsection "Unicode 8.0 is now supported"
+For details on what is in this release, see
+<http://www.unicode.org/versions/Unicode8.0.0/>.
+.SS "perl will now croak when closing an in-place output file fails"
+.IX Subsection "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.
+.ie n .SS "New ""\eb{lb}"" boundary in regular expressions"
+.el .SS "New \f(CW\eb{lb}\fP boundary in regular expressions"
+.IX Subsection "New b{lb} boundary in regular expressions"
+\&\f(CW\*(C`lb\*(C'\fR 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
+Unicode::LineBreak module, but now a light-weight, non-customizable
+version that is suitable for many purposes is in core Perl.
+.ie n .SS """qr/(?[ ])/"" now works in UTF\-8 locales"
+.el .SS "\f(CWqr/(?[ ])/\fP now works in UTF\-8 locales"
+.IX Subsection "qr/(?[ ])/ now works in UTF-8 locales"
+Extended Bracketed Character Classes
+now will successfully compile when \f(CW\*(C`use\ locale\*(C'\fR 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.
+.ie n .SS "Integer shift (""<<"" and "">>"") now more explicitly defined"
+.el .SS "Integer shift (\f(CW<<\fP and \f(CW>>\fP) now more explicitly defined"
+.IX Subsection "Integer shift (<< and >>) now more explicitly defined"
+Negative shifts are reverse shifts: left shift becomes right shift,
+and right shift becomes left shift.
+.PP
+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
+\&\f(CW\*(C`use integer\*(C'\fR, in which case the result is \-1 (arithmetic shift).
+.PP
+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":
+.PP
+.Vb 1
+\& 1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior.
+\&
+\& # And the same for <<, while Perl now produces 0 for both.
+.Ve
+.PP
+Now these behaviors are well-defined under Perl, regardless of what
+the underlying C implementation does. Note, however, that you are still
+constrained by the native integer width: you need to know how far left you
+can go. You can use for example:
+.PP
+.Vb 2
+\& use Config;
+\& my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3.
+.Ve
+.PP
+If you need a more bits on the left shift, you can use for example
+the \f(CW\*(C`bigint\*(C'\fR pragma, or the \f(CW\*(C`Bit::Vector\*(C'\fR module from CPAN.
+.SS "printf and sprintf now allow reordered precision arguments"
+.IX Subsection "printf and sprintf now allow reordered precision arguments"
+That is, \f(CW\*(C`sprintf \*(Aq|%.*2$d|\*(Aq, 2, 3\*(C'\fR now returns \f(CW\*(C`|002|\*(C'\fR. This extends
+the existing reordering mechanism (which allows reordering for arguments
+that are used as format fields, widths, and vector separators).
+.ie n .SS "More fields provided to ""sigaction"" callback with ""SA_SIGINFO"""
+.el .SS "More fields provided to \f(CWsigaction\fP callback with \f(CWSA_SIGINFO\fP"
+.IX Subsection "More fields provided to sigaction callback with SA_SIGINFO"
+When passing the \f(CW\*(C`SA_SIGINFO\*(C'\fR flag to sigaction, the
+\&\f(CW\*(C`errno\*(C'\fR, \f(CW\*(C`status\*(C'\fR, \f(CW\*(C`uid\*(C'\fR, \f(CW\*(C`pid\*(C'\fR, \f(CW\*(C`addr\*(C'\fR and \f(CW\*(C`band\*(C'\fR fields are now
+included in the hash passed to the handler, if supported by the
+platform.
+.SS "Hashbang redirection to Perl 6"
+.IX Subsection "Hashbang redirection to Perl 6"
+Previously perl would redirect to another interpreter if it found a
+hashbang path unless the path contains "perl" (see perlrun). To improve
+compatibility with Perl 6 this behavior has been extended to also redirect
+if "perl" is followed by "6".
+.SH Security
+.IX Header "Security"
+.ie n .SS "Set proper umask before calling mkstemp(3)"
+.el .SS "Set proper umask before calling \f(CWmkstemp(3)\fP"
+.IX Subsection "Set proper umask before calling mkstemp(3)"
+In 5.22 perl started setting umask to 0600 before calling \f(CWmkstemp(3)\fR
+and restoring it afterwards. This wrongfully tells \f(CWopen(2)\fR 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.
+.PP
+Systems that use mode 0666 in \f(CWmkstemp(3)\fR (like old versions of
+glibc) create a file with permissions 0066, leaving world read and
+write permissions regardless of current umask.
+.PP
+This has been fixed by using umask 0177 instead. [perl #127322]
+.SS "Fix out of boundary access in Win32 path handling"
+.IX Subsection "Fix out of boundary access in Win32 path handling"
+This is CVE\-2015\-8608. For more information see
+[GH #15067] <https://github.com/Perl/perl5/issues/15067>
+.SS "Fix loss of taint in canonpath"
+.IX Subsection "Fix loss of taint in canonpath"
+This is CVE\-2015\-8607. For more information see
+[GH #15084] <https://github.com/Perl/perl5/issues/15084>
+.ie n .SS "Avoid accessing uninitialized memory in win32 crypt()"
+.el .SS "Avoid accessing uninitialized memory in win32 \f(CWcrypt()\fP"
+.IX Subsection "Avoid accessing uninitialized memory in win32 crypt()"
+Added validation that will detect both a short salt and invalid characters
+in the salt.
+[GH #15091] <https://github.com/Perl/perl5/issues/15091>
+.ie n .SS "Remove duplicate environment variables from ""environ"""
+.el .SS "Remove duplicate environment variables from \f(CWenviron\fP"
+.IX Subsection "Remove duplicate environment variables from environ"
+Previously, if an environment variable appeared more than once in
+\&\f(CW\*(C`environ[]\*(C'\fR, \f(CW%ENV\fR would contain the last entry for that name,
+while a typical \f(CWgetenv()\fR would return the first entry. We now
+make sure \f(CW%ENV\fR contains the same as what \f(CW\*(C`getenv\*(C'\fR returns.
+.PP
+Second, we remove duplicates from \f(CW\*(C`environ[]\*(C'\fR, so if a setting
+with that name is set in \f(CW%ENV\fR, we won't pass an unsafe value
+to a child process.
+.PP
+[CVE\-2016\-2381]
+.SH "Incompatible Changes"
+.IX Header "Incompatible Changes"
+.ie n .SS "The ""autoderef"" feature has been removed"
+.el .SS "The \f(CWautoderef\fP feature has been removed"
+.IX Subsection "The autoderef feature has been removed"
+The experimental \f(CW\*(C`autoderef\*(C'\fR feature (which allowed calling \f(CW\*(C`push\*(C'\fR,
+\&\f(CW\*(C`pop\*(C'\fR, \f(CW\*(C`shift\*(C'\fR, \f(CW\*(C`unshift\*(C'\fR, \f(CW\*(C`splice\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR, and \f(CW\*(C`each\*(C'\fR on
+a scalar argument) has been deemed unsuccessful. It has now been removed;
+trying to use the feature (or to disable the \f(CW\*(C`experimental::autoderef\*(C'\fR
+warning it previously triggered) now yields an exception.
+.ie n .SS "Lexical $_ has been removed"
+.el .SS "Lexical \f(CW$_\fP has been removed"
+.IX Subsection "Lexical $_ has been removed"
+\&\f(CW\*(C`my $_\*(C'\fR 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.
+.ie n .SS """qr/\eb{wb}/"" is now tailored to Perl expectations"
+.el .SS "\f(CWqr/\eb{wb}/\fP is now tailored to Perl expectations"
+.IX Subsection "qr/b{wb}/ is now tailored to Perl expectations"
+This is now more suited to be a drop-in replacement for plain \f(CW\*(C`\eb\*(C'\fR, 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 \f(CW\*(C`\eb\*(C'\fR does. See
+"\eb{wb}" in perlrebackslash
+.SS "Regular expression compilation errors"
+.IX Subsection "Regular expression compilation errors"
+Some regular expression patterns that had runtime errors now
+don't compile at all.
+.PP
+Almost all Unicode properties using the \f(CW\*(C`\ep{}\*(C'\fR and \f(CW\*(C`\eP{}\*(C'\fR 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.
+.ie n .SS """qr/\eN{}/"" now disallowed under ""use re ""strict"""""
+.el .SS "\f(CWqr/\eN{}/\fP now disallowed under \f(CWuse re ""strict""\fP"
+.IX Subsection "qr/N{}/ now disallowed under use re ""strict"""
+An empty \f(CW\*(C`\eN{}\*(C'\fR makes no sense, but for backwards compatibility is
+accepted as doing nothing, though a deprecation warning is raised by
+default. But now this is a fatal error under the experimental feature
+"'strict' mode" in re.
+.SS "Nested declarations are now disallowed"
+.IX Subsection "Nested declarations are now disallowed"
+A \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, or \f(CW\*(C`state\*(C'\fR declaration is no longer allowed inside
+of another \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, or \f(CW\*(C`state\*(C'\fR declaration.
+.PP
+For example, these are now fatal:
+.PP
+.Vb 2
+\& my ($x, my($y));
+\& our (my $x);
+.Ve
+.PP
+[GH #14799] <https://github.com/Perl/perl5/issues/14799>
+.PP
+[GH #13548] <https://github.com/Perl/perl5/issues/13548>
+.ie n .SS "The ""/\eC/"" character class has been removed."
+.el .SS "The \f(CW/\eC/\fP character class has been removed."
+.IX Subsection "The /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 \f(CWutf8::encode()\fR on the string (or a
+copy) first.
+.ie n .SS "chdir(\*(Aq\*(Aq) no longer chdirs home"
+.el .SS "\f(CWchdir(\*(Aq\*(Aq)\fP no longer chdirs home"
+.IX Subsection "chdir() no longer chdirs home"
+Using \f(CWchdir(\*(Aq\*(Aq)\fR or \f(CWchdir(undef)\fR to chdir home has been deprecated since
+perl v5.8, and will now fail. Use \f(CWchdir()\fR instead.
+.SS "ASCII characters in variable names must now be all visible"
+.IX Subsection "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 \f(CW\*(C`DELETE\*(C'\fR). 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 \f(CW$^]\fR and \f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR. Details are at
+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 \f(CW\*(C`use\ utf8\*(C'\fR. 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).
+.ie n .SS "An off by one issue in $Carp::MaxArgNums has been fixed"
+.el .SS "An off by one issue in \f(CW$Carp::MaxArgNums\fP has been fixed"
+.IX Subsection "An off by one issue in $Carp::MaxArgNums has been fixed"
+\&\f(CW$Carp::MaxArgNums\fR is supposed to be the number of arguments to display.
+Prior to this version, it was instead showing \f(CW$Carp::MaxArgNums\fR + 1 arguments,
+contrary to the documentation.
+.ie n .SS "Only blanks and tabs are now allowed within ""[...]"" within ""(?[...])""."
+.el .SS "Only blanks and tabs are now allowed within \f(CW[...]\fP within \f(CW(?[...])\fP."
+.IX Subsection "Only blanks and tabs are now allowed within [...] within (?[...])."
+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 \f(CW\*(C`\et\*(C'\fR
+and SPACE characters. Previously, it was any white space. See
+"Extended Bracketed Character Classes" in perlrecharclass.
+.SH Deprecations
+.IX Header "Deprecations"
+.ie n .SS "Using code points above the platform's ""IV_MAX"" is now deprecated"
+.el .SS "Using code points above the platform's \f(CWIV_MAX\fP is now deprecated"
+.IX Subsection "Using code points above the platform's IV_MAX is now deprecated"
+Unicode defines code points in the range \f(CW\*(C`0..0x10FFFF\*(C'\fR. 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 \f(CW\*(C`IV_MAX\*(C'\fR is broken in
+some constructs, notably \f(CW\*(C`tr///\*(C'\fR, 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.
+\&\f(CW\*(C`IV_MAX\*(C'\fR is typically 2**31 \-1 on 32\-bit platforms, and 2**63\-1 on
+64\-bit ones.
+.SS "Doing bitwise operations on strings containing code points above 0xFF is deprecated"
+.IX Subsection "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 \f(CW\*(C`split\*(C'\fR and \f(CW\*(C`map ord\*(C'\fR. In the future, this
+warning will be replaced by an exception.
+.ie n .SS "sysread(), syswrite(), recv() and send() are deprecated on :utf8 handles"
+.el .SS "\f(CWsysread()\fP, \f(CWsyswrite()\fP, \f(CWrecv()\fP and \f(CWsend()\fP are deprecated on :utf8 handles"
+.IX Subsection "sysread(), syswrite(), recv() and send() are deprecated on :utf8 handles"
+The \f(CWsysread()\fR, \f(CWrecv()\fR, \f(CWsyswrite()\fR and \f(CWsend()\fR operators
+are deprecated on handles that have the \f(CW\*(C`:utf8\*(C'\fR layer, either
+explicitly, or implicitly, eg., with the \f(CW:encoding(UTF\-16LE)\fR layer.
+.PP
+Both \f(CWsysread()\fR and \f(CWrecv()\fR currently use only the \f(CW\*(C`:utf8\*(C'\fR flag for the
+stream, ignoring the actual layers. Since \f(CWsysread()\fR and \f(CWrecv()\fR do no
+UTF\-8 validation they can end up creating invalidly encoded scalars.
+.PP
+Similarly, \f(CWsyswrite()\fR and \f(CWsend()\fR use only the \f(CW\*(C`:utf8\*(C'\fR 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.
+.PP
+Ideally, all of these operators would completely ignore the \f(CW\*(C`:utf8\*(C'\fR
+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 \f(CWsysread()\fR, \f(CWrecv()\fR, \f(CWsyswrite()\fR or \f(CWsend()\fR
+are called on handle with the \f(CW\*(C`:utf8\*(C'\fR layer.
+.SH "Performance Enhancements"
+.IX Header "Performance Enhancements"
+.IP \(bu 4
+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:
+.Sp
+.Vb 1
+\& sub f{} f();
+.Ve
+.IP \(bu 4
+Many languages, such as Chinese, are caseless. Perl now knows about
+most common ones, and skips much of the work when
+a program tries to change case in them (like \f(CWucfirst()\fR) or match
+caselessly (\f(CW\*(C`qr//i\*(C'\fR). This will speed up a program, such as a web
+server, that can operate on multiple languages, while it is operating on a
+caseless one.
+.IP \(bu 4
+\&\f(CW\*(C`/fixed\-substr/\*(C'\fR has been made much faster.
+.Sp
+On platforms with a libc \f(CWmemchr()\fR 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:
+.Sp
+.Vb 2
+\& $s = "a" x 1000 . "wxyz";
+\& $s =~ /wxyz/ for 1..30000
+.Ve
+.Sp
+is now about 7 times faster. On systems with slow \f(CWmemchr()\fR, e.g. 32\-bit ARM
+Raspberry Pi, there will be a small or little speedup. Conversely, some
+pathological cases, such as \f(CW\*(C`"ab" x 1000 =~ /aa/\*(C'\fR will be slower now; up to 3
+times slower on the rPi, 1.5x slower on x86_64.
+.IP \(bu 4
+Faster addition, subtraction and multiplication.
+.Sp
+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.
+.IP \(bu 4
+Preincrement, predecrement, postincrement, and postdecrement have been
+made faster by internally splitting the functions which handled multiple
+cases into different functions.
+.IP \(bu 4
+Creating Perl debugger data structures (see "Debugger Internals" in perldebguts)
+for XSUBs and const subs has been removed. This removed one glob/scalar combo
+for each unique \f(CW\*(C`.c\*(C'\fR file that XSUBs and const subs came from. On startup
+(\f(CW\*(C`perl \-e"0"\*(C'\fR) about half a dozen glob/scalar debugger combos were created.
+Loading XS modules created more glob/scalar combos. These things were
+being created regardless of whether the perl debugger was being used,
+and despite the fact that it can't debug C code anyway
+.IP \(bu 4
+On Win32, \f(CW\*(C`stat\*(C'\fRing or \f(CW\*(C`\-X\*(C'\fRing a path, if the file or directory does not
+exist, is now 3.5x faster than before.
+.IP \(bu 4
+Single arguments in list assign are now slightly faster:
+.Sp
+.Vb 2
+\& ($x) = (...);
+\& (...) = ($x);
+.Ve
+.IP \(bu 4
+Less peak memory is now used when compiling regular expression patterns.
+.SH "Modules and Pragmata"
+.IX Header "Modules and Pragmata"
+.SS "Updated Modules and Pragmata"
+.IX Subsection "Updated Modules and Pragmata"
+.IP \(bu 4
+arybase has been upgraded from version 0.10 to 0.11.
+.IP \(bu 4
+Attribute::Handlers has been upgraded from version 0.97 to 0.99.
+.IP \(bu 4
+autodie has been upgraded from version 2.26 to 2.29.
+.IP \(bu 4
+autouse has been upgraded from version 1.08 to 1.11.
+.IP \(bu 4
+B has been upgraded from version 1.58 to 1.62.
+.IP \(bu 4
+B::Deparse has been upgraded from version 1.35 to 1.37.
+.IP \(bu 4
+base has been upgraded from version 2.22 to 2.23.
+.IP \(bu 4
+Benchmark has been upgraded from version 1.2 to 1.22.
+.IP \(bu 4
+bignum has been upgraded from version 0.39 to 0.42.
+.IP \(bu 4
+bytes has been upgraded from version 1.04 to 1.05.
+.IP \(bu 4
+Carp has been upgraded from version 1.36 to 1.40.
+.IP \(bu 4
+Compress::Raw::Bzip2 has been upgraded from version 2.068 to 2.069.
+.IP \(bu 4
+Compress::Raw::Zlib has been upgraded from version 2.068 to 2.069.
+.IP \(bu 4
+Config::Perl::V has been upgraded from version 0.24 to 0.25.
+.IP \(bu 4
+CPAN::Meta has been upgraded from version 2.150001 to 2.150005.
+.IP \(bu 4
+CPAN::Meta::Requirements has been upgraded from version 2.132 to 2.140.
+.IP \(bu 4
+CPAN::Meta::YAML has been upgraded from version 0.012 to 0.018.
+.IP \(bu 4
+Data::Dumper has been upgraded from version 2.158 to 2.160.
+.IP \(bu 4
+Devel::Peek has been upgraded from version 1.22 to 1.23.
+.IP \(bu 4
+Devel::PPPort has been upgraded from version 3.31 to 3.32.
+.IP \(bu 4
+Dumpvalue has been upgraded from version 1.17 to 1.18.
+.IP \(bu 4
+DynaLoader has been upgraded from version 1.32 to 1.38.
+.IP \(bu 4
+Encode has been upgraded from version 2.72 to 2.80.
+.IP \(bu 4
+encoding has been upgraded from version 2.14 to 2.17.
+.IP \(bu 4
+encoding::warnings has been upgraded from version 0.11 to 0.12.
+.IP \(bu 4
+English has been upgraded from version 1.09 to 1.10.
+.IP \(bu 4
+Errno has been upgraded from version 1.23 to 1.25.
+.IP \(bu 4
+experimental has been upgraded from version 0.013 to 0.016.
+.IP \(bu 4
+ExtUtils::CBuilder has been upgraded from version 0.280221 to 0.280225.
+.IP \(bu 4
+ExtUtils::Embed has been upgraded from version 1.32 to 1.33.
+.IP \(bu 4
+ExtUtils::MakeMaker has been upgraded from version 7.04_01 to 7.10_01.
+.IP \(bu 4
+ExtUtils::ParseXS has been upgraded from version 3.28 to 3.31.
+.IP \(bu 4
+ExtUtils::Typemaps has been upgraded from version 3.28 to 3.31.
+.IP \(bu 4
+feature has been upgraded from version 1.40 to 1.42.
+.IP \(bu 4
+fields has been upgraded from version 2.17 to 2.23.
+.IP \(bu 4
+File::Find has been upgraded from version 1.29 to 1.34.
+.IP \(bu 4
+File::Glob has been upgraded from version 1.24 to 1.26.
+.IP \(bu 4
+File::Path has been upgraded from version 2.09 to 2.12_01.
+.IP \(bu 4
+File::Spec has been upgraded from version 3.56 to 3.63.
+.IP \(bu 4
+Filter::Util::Call has been upgraded from version 1.54 to 1.55.
+.IP \(bu 4
+Getopt::Long has been upgraded from version 2.45 to 2.48.
+.IP \(bu 4
+Hash::Util has been upgraded from version 0.18 to 0.19.
+.IP \(bu 4
+Hash::Util::FieldHash has been upgraded from version 1.15 to 1.19.
+.IP \(bu 4
+HTTP::Tiny has been upgraded from version 0.054 to 0.056.
+.IP \(bu 4
+I18N::Langinfo has been upgraded from version 0.12 to 0.13.
+.IP \(bu 4
+if has been upgraded from version 0.0604 to 0.0606.
+.IP \(bu 4
+IO has been upgraded from version 1.35 to 1.36.
+.IP \(bu 4
+IO-Compress has been upgraded from version 2.068 to 2.069.
+.IP \(bu 4
+IPC::Open3 has been upgraded from version 1.18 to 1.20.
+.IP \(bu 4
+IPC::SysV has been upgraded from version 2.04 to 2.06_01.
+.IP \(bu 4
+List::Util has been upgraded from version 1.41 to 1.42_02.
+.IP \(bu 4
+locale has been upgraded from version 1.06 to 1.08.
+.IP \(bu 4
+Locale::Codes has been upgraded from version 3.34 to 3.37.
+.IP \(bu 4
+Math::BigInt has been upgraded from version 1.9997 to 1.999715.
+.IP \(bu 4
+Math::BigInt::FastCalc has been upgraded from version 0.31 to 0.40.
+.IP \(bu 4
+Math::BigRat has been upgraded from version 0.2608 to 0.260802.
+.IP \(bu 4
+Module::CoreList has been upgraded from version 5.20150520 to 5.20160320.
+.IP \(bu 4
+Module::Metadata has been upgraded from version 1.000026 to 1.000031.
+.IP \(bu 4
+mro has been upgraded from version 1.17 to 1.18.
+.IP \(bu 4
+ODBM_File has been upgraded from version 1.12 to 1.14.
+.IP \(bu 4
+Opcode has been upgraded from version 1.32 to 1.34.
+.IP \(bu 4
+parent has been upgraded from version 0.232 to 0.234.
+.IP \(bu 4
+Parse::CPAN::Meta has been upgraded from version 1.4414 to 1.4417.
+.IP \(bu 4
+Perl::OSType has been upgraded from version 1.008 to 1.009.
+.IP \(bu 4
+perlfaq has been upgraded from version 5.021009 to 5.021010.
+.IP \(bu 4
+PerlIO::encoding has been upgraded from version 0.21 to 0.24.
+.IP \(bu 4
+PerlIO::mmap has been upgraded from version 0.014 to 0.016.
+.IP \(bu 4
+PerlIO::scalar has been upgraded from version 0.22 to 0.24.
+.IP \(bu 4
+PerlIO::via has been upgraded from version 0.15 to 0.16.
+.IP \(bu 4
+Pod::Functions has been upgraded from version 1.09 to 1.10.
+.IP \(bu 4
+Pod::Perldoc has been upgraded from version 3.25 to 3.25_02.
+.IP \(bu 4
+Pod::Simple has been upgraded from version 3.29 to 3.32.
+.IP \(bu 4
+Pod::Usage has been upgraded from version 1.64 to 1.68.
+.IP \(bu 4
+POSIX has been upgraded from version 1.53 to 1.65.
+.IP \(bu 4
+Scalar::Util has been upgraded from version 1.41 to 1.42_02.
+.IP \(bu 4
+SDBM_File has been upgraded from version 1.13 to 1.14.
+.IP \(bu 4
+SelfLoader has been upgraded from version 1.22 to 1.23.
+.IP \(bu 4
+Socket has been upgraded from version 2.018 to 2.020_03.
+.IP \(bu 4
+Storable has been upgraded from version 2.53 to 2.56.
+.IP \(bu 4
+strict has been upgraded from version 1.09 to 1.11.
+.IP \(bu 4
+Term::ANSIColor has been upgraded from version 4.03 to 4.04.
+.IP \(bu 4
+Term::Cap has been upgraded from version 1.15 to 1.17.
+.IP \(bu 4
+Test has been upgraded from version 1.26 to 1.28.
+.IP \(bu 4
+Test::Harness has been upgraded from version 3.35 to 3.36.
+.IP \(bu 4
+Thread::Queue has been upgraded from version 3.05 to 3.08.
+.IP \(bu 4
+threads has been upgraded from version 2.01 to 2.06.
+.IP \(bu 4
+threads::shared has been upgraded from version 1.48 to 1.50.
+.IP \(bu 4
+Tie::File has been upgraded from version 1.01 to 1.02.
+.IP \(bu 4
+Tie::Scalar has been upgraded from version 1.03 to 1.04.
+.IP \(bu 4
+Time::HiRes has been upgraded from version 1.9726 to 1.9732.
+.IP \(bu 4
+Time::Piece has been upgraded from version 1.29 to 1.31.
+.IP \(bu 4
+Unicode::Collate has been upgraded from version 1.12 to 1.14.
+.IP \(bu 4
+Unicode::Normalize has been upgraded from version 1.18 to 1.25.
+.IP \(bu 4
+Unicode::UCD has been upgraded from version 0.61 to 0.64.
+.IP \(bu 4
+UNIVERSAL has been upgraded from version 1.12 to 1.13.
+.IP \(bu 4
+utf8 has been upgraded from version 1.17 to 1.19.
+.IP \(bu 4
+version has been upgraded from version 0.9909 to 0.9916.
+.IP \(bu 4
+warnings has been upgraded from version 1.32 to 1.36.
+.IP \(bu 4
+Win32 has been upgraded from version 0.51 to 0.52.
+.IP \(bu 4
+Win32API::File has been upgraded from version 0.1202 to 0.1203.
+.IP \(bu 4
+XS::Typemap has been upgraded from version 0.13 to 0.14.
+.IP \(bu 4
+XSLoader has been upgraded from version 0.20 to 0.21.
+.SH Documentation
+.IX Header "Documentation"
+.SS "Changes to Existing Documentation"
+.IX Subsection "Changes to Existing Documentation"
+\fIperlapi\fR
+.IX Subsection "perlapi"
+.IP \(bu 4
+The process of using undocumented globals has been documented, namely, that one
+should send email to 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.
+.PP
+\fIperlcall\fR
+.IX Subsection "perlcall"
+.IP \(bu 4
+A number of cleanups have been made to perlcall, including:
+.RS 4
+.IP \(bu 4
+use \f(CW\*(C`EXTEND(SP, n)\*(C'\fR and \f(CWPUSHs()\fR instead of \f(CWXPUSHs()\fR where applicable
+and update prose to match
+.IP \(bu 4
+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
+.IP \(bu 4
+add API documentation for POPu and POPul
+.IP \(bu 4
+use ERRSV more efficiently
+.IP \(bu 4
+approaches to thread-safety storage of SVs.
+.RE
+.RS 4
+.RE
+.PP
+\fIperlfunc\fR
+.IX Subsection "perlfunc"
+.IP \(bu 4
+The documentation of \f(CW\*(C`hex\*(C'\fR has been revised to clarify valid inputs.
+.IP \(bu 4
+Better explain meaning of negative PIDs in \f(CW\*(C`waitpid\*(C'\fR.
+[GH #15108] <https://github.com/Perl/perl5/issues/15108>
+.IP \(bu 4
+General cleanup: there's more consistency now (in POD usage, grammar, code
+examples), better practices in code examples (use of \f(CW\*(C`my\*(C'\fR, removal of bareword
+filehandles, dropped usage of \f(CW\*(C`&\*(C'\fR when calling subroutines, ...), etc.
+.PP
+\fIperlguts\fR
+.IX Subsection "perlguts"
+.IP \(bu 4
+A new section has been added, "Dynamic Scope and the Context
+Stack" in perlguts, which explains how the perl context stack works.
+.PP
+\fIperllocale\fR
+.IX Subsection "perllocale"
+.IP \(bu 4
+A stronger caution about using locales in threaded applications is
+given. Locales are not thread-safe, and you can get wrong results or
+even segfaults if you use them there.
+.PP
+\fIperlmodlib\fR
+.IX Subsection "perlmodlib"
+.IP \(bu 4
+We now recommend contacting the module-authors list or PAUSE in seeking
+guidance on the naming of modules.
+.PP
+\fIperlop\fR
+.IX Subsection "perlop"
+.IP \(bu 4
+The documentation of \f(CW\*(C`qx//\*(C'\fR now describes how \f(CW$?\fR is affected.
+.PP
+\fIperlpolicy\fR
+.IX Subsection "perlpolicy"
+.IP \(bu 4
+This note has been added to perlpolicy:
+.Sp
+.Vb 3
+\& 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.
+.Ve
+.PP
+\fIperlreftut\fR
+.IX Subsection "perlreftut"
+.IP \(bu 4
+Fix some examples to be strict clean.
+.PP
+\fIperlrebackslash\fR
+.IX Subsection "perlrebackslash"
+.IP \(bu 4
+Clarify that in languages like Japanese and Thai, dictionary lookup
+is required to determine word boundaries.
+.PP
+\fIperlsub\fR
+.IX Subsection "perlsub"
+.IP \(bu 4
+Updated to note that anonymous subroutines can have signatures.
+.PP
+\fIperlsyn\fR
+.IX Subsection "perlsyn"
+.IP \(bu 4
+Fixed a broken example where \f(CW\*(C`=\*(C'\fR was used instead of
+\&\f(CW\*(C`==\*(C'\fR in conditional in do/while example.
+.PP
+\fIperltie\fR
+.IX Subsection "perltie"
+.IP \(bu 4
+The usage of \f(CW\*(C`FIRSTKEY\*(C'\fR and \f(CW\*(C`NEXTKEY\*(C'\fR has been clarified.
+.PP
+\fIperlunicode\fR
+.IX Subsection "perlunicode"
+.IP \(bu 4
+Discourage use of 'In' as a prefix signifying the Unicode Block property.
+.PP
+\fIperlvar\fR
+.IX Subsection "perlvar"
+.IP \(bu 4
+The documentation of \f(CW$@\fR was reworded to clarify that it is not just for
+syntax errors in \f(CW\*(C`eval\*(C'\fR.
+[GH #14572] <https://github.com/Perl/perl5/issues/14572>
+.IP \(bu 4
+The specific true value of \f(CW$!{E...}\fR is now documented, noting that it is
+subject to change and not guaranteed.
+.IP \(bu 4
+Use of \f(CW$OLD_PERL_VERSION\fR is now discouraged.
+.PP
+\fIperlxs\fR
+.IX Subsection "perlxs"
+.IP \(bu 4
+The documentation of \f(CW\*(C`PROTOTYPES\*(C'\fR has been corrected; they are \fIdisabled\fR
+by default, not \fIenabled\fR.
+.SH Diagnostics
+.IX Header "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 perldiag.
+.SS "New Diagnostics"
+.IX Subsection "New Diagnostics"
+\fINew Errors\fR
+.IX Subsection "New Errors"
+.IP \(bu 4
+\&\f(CW%s\fR must not be a named sequence in transliteration operator
+.IP \(bu 4
+Can't find Unicode property definition "%s" in regex;
+.IP \(bu 4
+Can't redeclare "%s" in "%s"
+.IP \(bu 4
+Character following \ep must be '{' or a single-character Unicode property name in regex;
+.IP \(bu 4
+Empty \e%c in regex; marked by <\-\- HERE in m/%s/
+.IP \(bu 4
+Illegal user-defined property name
+.IP \(bu 4
+Invalid number '%s' for \-C option.
+.IP \(bu 4
+Sequence (?... not terminated in regex; marked by <\-\-\ HERE in m/%s/
+.IP \(bu 4
+Sequence (?P<... not terminated in regex; marked by <\-\- HERE in m/%s/
+.IP \(bu 4
+Sequence (?P>... not terminated in regex; marked by <\-\- HERE in m/%s/
+.PP
+\fINew Warnings\fR
+.IX Subsection "New Warnings"
+.IP \(bu 4
+Assuming NOT a POSIX class since \f(CW%s\fR in regex; marked by <\-\- HERE in m/%s/
+.IP \(bu 4
+%s() is deprecated on :utf8 handles
+.SS "Changes to Existing Diagnostics"
+.IX Subsection "Changes to Existing Diagnostics"
+.IP \(bu 4
+Accessing the \f(CW\*(C`IO\*(C'\fR part of a glob as \f(CW\*(C`FILEHANDLE\*(C'\fR instead of \f(CW\*(C`IO\*(C'\fR 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.
+[GH #15105] <https://github.com/Perl/perl5/issues/15105>
+.IP \(bu 4
+The diagnostic \f(CW\*(C`Hexadecimal float: internal error\*(C'\fR has been changed to
+\&\f(CW\*(C`Hexadecimal float: internal error (%s)\*(C'\fR to include more information.
+.IP \(bu 4
+Can't modify non-lvalue subroutine call of &%s
+.Sp
+This error now reports the name of the non-lvalue subroutine you attempted to
+use as an lvalue.
+.IP \(bu 4
+When running out of memory during an attempt the increase the stack
+size, previously, perl would die using the cryptic message
+\&\f(CW\*(C`panic: av_extend_guts() negative count (\-9223372036854775681)\*(C'\fR.
+This has been fixed to show the prettier message:
+Out of memory during stack extend
+.SH "Configuration and Compilation"
+.IX Header "Configuration and Compilation"
+.IP \(bu 4
+\&\f(CW\*(C`Configure\*(C'\fR now acts as if the \f(CW\*(C`\-O\*(C'\fR 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. \f(CW\*(C`\-O\*(C'\fR is now
+permitted, but ignored.
+.IP \(bu 4
+Bison 3.0 is now supported.
+.IP \(bu 4
+\&\fIConfigure\fR no longer probes for \fIlibnm\fR by default. Originally
+this was the "New Math" library, but the name has been re-used by the
+GNOME NetworkManager.
+[GH #15115] <https://github.com/Perl/perl5/issues/15115>
+.IP \(bu 4
+Added \fIConfigure\fR probes for \f(CW\*(C`newlocale\*(C'\fR, \f(CW\*(C`freelocale\*(C'\fR, and \f(CW\*(C`uselocale\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`PPPort.so/PPPort.dll\*(C'\fR no longer get installed, as they are
+not used by \f(CW\*(C`PPPort.pm\*(C'\fR, only by its test files.
+.IP \(bu 4
+It is now possible to specify which compilation date to show on
+\&\f(CW\*(C`perl \-V\*(C'\fR output, by setting the macro \f(CW\*(C`PERL_BUILD_DATE\*(C'\fR.
+.IP \(bu 4
+Using the \f(CW\*(C`NO_HASH_SEED\*(C'\fR define in combination with the default hash algorithm
+\&\f(CW\*(C`PERL_HASH_FUNC_ONE_AT_A_TIME_HARD\*(C'\fR resulted in a fatal error while compiling
+the interpreter, since Perl 5.17.10. This has been fixed.
+.IP \(bu 4
+\&\fIConfigure\fR should handle spaces in paths a little better.
+.IP \(bu 4
+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.
+.IP \(bu 4
+The GNU Make makefile for Win32 now supports parallel builds. [perl #126632]
+.IP \(bu 4
+You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632]
+.IP \(bu 4
+The Win32 miniperl now has a real \f(CW\*(C`getcwd\*(C'\fR which increases build performance
+resulting in \f(CWgetcwd()\fR being 605x faster in Win32 miniperl.
+.IP \(bu 4
+Configure now takes \f(CW\*(C`\-Dusequadmath\*(C'\fR into account when calculating the
+\&\f(CW\*(C`alignbytes\*(C'\fR configuration variable. Previously the mis-calculated
+\&\f(CW\*(C`alignbytes\*(C'\fR could cause alignment errors on debugging builds. [perl
+#127894]
+.SH Testing
+.IX Header "Testing"
+.IP \(bu 4
+A new test (\fIt/op/aassign.t\fR) has been added to test the list assignment operator
+\&\f(CW\*(C`OP_AASSIGN\*(C'\fR.
+.IP \(bu 4
+Parallel building has been added to the dmake \f(CW\*(C`makefile.mk\*(C'\fR makefile. All
+Win32 compilers are supported.
+.SH "Platform Support"
+.IX Header "Platform Support"
+.SS "Platform-Specific Notes"
+.IX Subsection "Platform-Specific Notes"
+.IP AmigaOS 4
+.IX Item "AmigaOS"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+The AmigaOS port has been reintegrated into the main tree, based off of
+Perl 5.22.1.
+.RE
+.RS 4
+.RE
+.IP Cygwin 4
+.IX Item "Cygwin"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Tests are more robust against unusual cygdrive prefixes.
+[GH #15076] <https://github.com/Perl/perl5/issues/15076>
+.RE
+.RS 4
+.RE
+.IP EBCDIC 4
+.IX Item "EBCDIC"
+.RS 4
+.PD 0
+.IP "UTF-EBCDIC extended" 4
+.IX Item "UTF-EBCDIC extended"
+.PD
+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 perlbug@perl.org <mailto:perlbug@perl.org>,
+and we will write a conversion script for you.
+.ie n .IP "EBCDIC cmp() and sort() fixed for UTF-EBCDIC strings" 4
+.el .IP "EBCDIC \f(CWcmp()\fR and \f(CWsort()\fR fixed for UTF-EBCDIC strings" 4
+.IX Item "EBCDIC cmp() and 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 \f(CWsort()\fR
+uses \f(CWcmp()\fR, this fixes that as well.
+.ie n .IP "EBCDIC ""tr///"" and ""y///"" fixed for ""\eN{}"", and ""use\ utf8"" ranges" 4
+.el .IP "EBCDIC \f(CWtr///\fR and \f(CWy///\fR fixed for \f(CW\eN{}\fR, and \f(CWuse\ utf8\fR ranges" 4
+.IX Item "EBCDIC tr/// and y/// fixed for N{}, and 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 \f(CW\*(C`tr///\*(C'\fR. See
+\&\f(CW\*(C`tr///\*(C'\fR.
+.Sp
+There were also some problems with these operations under \f(CW\*(C`use\ utf8\*(C'\fR, which are now fixed
+.RE
+.RS 4
+.RE
+.IP FreeBSD 4
+.IX Item "FreeBSD"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Use the \f(CWfdclose()\fR function from FreeBSD if it is available.
+[GH #15082] <https://github.com/Perl/perl5/issues/15082>
+.RE
+.RS 4
+.RE
+.IP IRIX 4
+.IX Item "IRIX"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Under some circumstances IRIX stdio \f(CWfgetc()\fR and \f(CWfread()\fR set the errno to
+\&\f(CW\*(C`ENOENT\*(C'\fR, which made no sense according to either IRIX or POSIX docs. Errno
+is now cleared in such cases.
+[GH #14557] <https://github.com/Perl/perl5/issues/14557>
+.IP \(bu 4
+Problems when multiplying long doubles by infinity have been fixed.
+[GH #14993] <https://github.com/Perl/perl5/issues/14993>
+.RE
+.RS 4
+.RE
+.IP "MacOS X" 4
+.IX Item "MacOS X"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+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 \f(CW\*(C`export MACOSX_DEPLOYMENT_TARGET=10.N\*(C'\fR 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.
+.IP \(bu 4
+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
+\&\f(CWsetenv()\fR function to update the environment.
+.Sp
+Perl now uses \f(CWsetenv()\fR/\f(CWunsetenv()\fR to update the environment on OS X.
+[GH #14955] <https://github.com/Perl/perl5/issues/14955>
+.RE
+.RS 4
+.RE
+.IP Solaris 4
+.IX Item "Solaris"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+All Solaris variants now build a shared libperl
+.Sp
+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.
+.RE
+.RS 4
+.RE
+.IP Tru64 4
+.IX Item "Tru64"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Workaround where Tru64 balks when prototypes are listed as
+\&\f(CW\*(C`PERL_STATIC_INLINE\*(C'\fR, but where the test is build with
+\&\f(CW\*(C`\-DPERL_NO_INLINE_FUNCTIONS\*(C'\fR.
+.RE
+.RS 4
+.RE
+.IP VMS 4
+.IX Item "VMS"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+On VMS, the math function prototypes in \f(CW\*(C`math.h\*(C'\fR are now visible under C++.
+Now building the POSIX extension with C++ will no longer crash.
+.IP \(bu 4
+VMS has had \f(CW\*(C`setenv\*(C'\fR/\f(CW\*(C`unsetenv\*(C'\fR since v7.0 (released in 1996),
+\&\f(CW\*(C`Perl_vmssetenv\*(C'\fR now always uses \f(CW\*(C`setenv\*(C'\fR/\f(CW\*(C`unsetenv\*(C'\fR.
+.IP \(bu 4
+Perl now implements its own \f(CW\*(C`killpg\*(C'\fR 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:
+.Sp
+.Vb 1
+\& kill SIGKILL, \-$pid;
+.Ve
+.Sp
+to signal all processes in the same group as \f(CW$pid\fR.
+.IP \(bu 4
+For those \f(CW%ENV\fR 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 \f(CW%ENV\fR elements derived from the environ array
+case-sensitive on look-up as well as case-preserving on store.
+.IP \(bu 4
+Environment look-ups for \f(CW\*(C`PERL5LIB\*(C'\fR and \f(CW\*(C`PERLLIB\*(C'\fR previously only
+considered logical names, but now consider all sources of \f(CW%ENV\fR as
+determined by \f(CW\*(C`PERL_ENV_TABLES\*(C'\fR and as documented in "%ENV" in perlvms.
+.IP \(bu 4
+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.
+.RE
+.RS 4
+.RE
+.IP Win32 4
+.IX Item "Win32"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+A new build option \f(CW\*(C`USE_NO_REGISTRY\*(C'\fR 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 perlwin32. Internally, in
+C, the name of this option is \f(CW\*(C`WIN32_NO_REGISTRY\*(C'\fR.
+.IP \(bu 4
+The behavior of Perl using \f(CW\*(C`HKEY_CURRENT_USER\eSoftware\ePerl\*(C'\fR and
+\&\f(CW\*(C`HKEY_LOCAL_MACHINE\eSoftware\ePerl\*(C'\fR to lookup certain values, including \f(CW%ENV\fR
+vars starting with \f(CW\*(C`PERL\*(C'\fR has changed. Previously, the 2 keys were checked
+for entries at all times through the perl process's life time even if
+they did not
+exist. For performance reasons, now, if the root key (i.e.
+\&\f(CW\*(C`HKEY_CURRENT_USER\eSoftware\ePerl\*(C'\fR or \f(CW\*(C`HKEY_LOCAL_MACHINE\eSoftware\ePerl\*(C'\fR) does
+not exist at process start time, it will not be checked again for \f(CW%ENV\fR
+override entries for the remainder of the perl process's life. This more
+closely matches Unix behavior in that the environment is copied or inherited
+on startup and changing the variable in the parent process or another process
+or editing \fI.bashrc\fR will not change the environmental variable in other
+existing, running, processes.
+.IP \(bu 4
+One glob fetch was removed for each \f(CW\*(C`\-X\*(C'\fR or \f(CW\*(C`stat\*(C'\fR call whether done from
+Perl code or internally from Perl's C code. The glob being looked up was
+\&\f(CW\*(C`${^WIN32_SLOPPY_STAT}\*(C'\fR which is a special variable. This makes \f(CW\*(C`\-X\*(C'\fR and
+\&\f(CW\*(C`stat\*(C'\fR slightly faster.
+.IP \(bu 4
+During miniperl's process startup, during the build process, 4 to 8 IO calls
+related to the process starting \fI.pl\fR and the \fIbuildcustomize.pl\fR file were
+removed from the code opening and executing the first 1 or 2 \fI.pl\fR files.
+.IP \(bu 4
+Builds using Microsoft Visual C++ 2003 and earlier no longer produce
+an "INTERNAL COMPILER ERROR" message. [perl #126045]
+.IP \(bu 4
+Visual C++ 2013 builds will now execute on XP and higher. Previously they would
+only execute on Vista and higher.
+.IP \(bu 4
+You can now build perl with GNU Make and GCC. [perl #123440]
+.IP \(bu 4
+\&\f(CW\*(C`truncate($filename, $size)\*(C'\fR now works for files over 4GB in size.
+[perl #125347]
+.IP \(bu 4
+Parallel building has been added to the dmake \f(CW\*(C`makefile.mk\*(C'\fR makefile. All
+Win32 compilers are supported.
+.IP \(bu 4
+Building a 64\-bit perl with a 64\-bit GCC but a 32\-bit gmake would
+result in an invalid \f(CW$Config{archname}\fR for the resulting perl.
+[perl #127584]
+.IP \(bu 4
+Errors set by Winsock functions are now put directly into \f(CW$^E\fR, and the
+relevant \f(CW\*(C`WSAE*\*(C'\fR error codes are now exported from the Errno and POSIX
+modules for testing this against.
+.Sp
+The previous behavior of putting the errors (converted to POSIX-style \f(CW\*(C`E*\*(C'\fR
+error codes since Perl 5.20.0) into \f(CW$!\fR 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.
+.Sp
+The new behavior 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.
+.Sp
+The old behavior is currently retained, warts and all, for backwards
+compatibility, but users are encouraged to change any code that tests \f(CW$!\fR
+against \f(CW\*(C`E*\*(C'\fR constants for Winsock errors to instead test \f(CW$^E\fR against
+\&\f(CW\*(C`WSAE*\*(C'\fR constants. After a suitable deprecation period, the old behavior may
+be removed, leaving \f(CW$!\fR unchanged after Winsock function calls, to avoid any
+possible confusion over which error variable to check.
+.RE
+.RS 4
+.RE
+.IP ppc64el 4
+.IX Item "ppc64el"
+.RS 4
+.PD 0
+.IP "floating point" 4
+.IX Item "floating point"
+.PD
+The floating point format of ppc64el (Debian naming for little-endian
+PowerPC) is now detected correctly.
+.RE
+.RS 4
+.RE
+.SH "Internal Changes"
+.IX Header "Internal Changes"
+.IP \(bu 4
+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:
+.RS 4
+.IP \(bu 4
+The \f(CWPUSHBLOCK()\fR, \f(CWPOPSUB()\fR etc. macros have been replaced with static
+inline functions such as \f(CWcx_pushblock()\fR, \f(CWcx_popsub()\fR etc. These use
+function args rather than implicitly relying on local vars such as
+\&\f(CW\*(C`gimme\*(C'\fR and \f(CW\*(C`newsp\*(C'\fR being available. Also their functionality has
+changed: in particular, \f(CWcx_popblock()\fR no longer decrements
+\&\f(CW\*(C`cxstack_ix\*(C'\fR. The ordering of the steps in the \f(CW\*(C`pp_leave*\*(C'\fR functions
+involving \f(CWcx_popblock()\fR, \f(CWcx_popsub()\fR etc. has changed. See the new
+documentation, "Dynamic Scope and the Context Stack" in perlguts, for
+details on how to use them.
+.IP \(bu 4
+Various macros, which now consistently have a CX_ prefix, have been added:
+.Sp
+.Vb 1
+\& CX_CUR(), CX_LEAVE_SCOPE(), CX_POP()
+.Ve
+.Sp
+or renamed:
+.Sp
+.Vb 1
+\& CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST()
+.Ve
+.IP \(bu 4
+\&\f(CWcx_pushblock()\fR now saves \f(CW\*(C`PL_savestack_ix\*(C'\fR and \f(CW\*(C`PL_tmps_floor\*(C'\fR, so
+\&\f(CW\*(C`pp_enter*\*(C'\fR and \f(CW\*(C`pp_leave*\*(C'\fR no longer do
+.Sp
+.Vb 1
+\& ENTER; SAVETMPS; ....; LEAVE
+.Ve
+.IP \(bu 4
+\&\f(CWcx_popblock()\fR now also restores \f(CW\*(C`PL_curpm\*(C'\fR.
+.IP \(bu 4
+In \f(CWdounwind()\fR 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
+\&\f(CWcx_popsub()\fR and placed into its own macro, \f(CWCX_LEAVE_SCOPE(cx)\fR, which
+must be called before \f(CWcx_popsub()\fR etc.
+.Sp
+\&\f(CWdounwind()\fR now also does a \f(CWcx_popblock()\fR on the last popped frame
+(formerly it only did the \f(CWcx_popsub()\fR etc. actions on each frame).
+.IP \(bu 4
+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
+\&\f(CW\*(C`nextstate\*(C'\fR following the block (apart from an existing hack that did
+this for recursive subs in scalar context); and in something like
+\&\f(CW\*(C`f(g())\*(C'\fR, the temps created by the last statement in \f(CWg()\fR would
+formerly not be freed until the statement following the return from
+\&\f(CWf()\fR.
+.IP \(bu 4
+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 \f(CWcx_pushfoo()\fR and \f(CWcx_popfoo()\fR, which is much
+faster.
+.IP \(bu 4
+Various context struct fields have been added, removed or modified.
+.IP \(bu 4
+The handling of \f(CW@_\fR in \f(CWcx_pushsub()\fR and \f(CWcx_popsub()\fR has been
+considerably tidied up, including removing the \f(CW\*(C`argarray\*(C'\fR field from the
+context struct, and extracting out some common (but rarely used) code into
+a separate function, \f(CWclear_defarray()\fR. Also, useful subsets of
+\&\f(CWcx_popsub()\fR which had been unrolled in places like \f(CW\*(C`pp_goto\*(C'\fR have been
+gathered into the new functions \f(CWcx_popsub_args()\fR and
+\&\f(CWcx_popsub_common()\fR.
+.IP \(bu 4
+\&\f(CW\*(C`pp_leavesub\*(C'\fR and \f(CW\*(C`pp_leavesublv\*(C'\fR now use the same function as the rest
+of the \f(CW\*(C`pp_leave*\*(C'\fR's to process return args.
+.IP \(bu 4
+\&\f(CW\*(C`CXp_FOR_PAD\*(C'\fR and \f(CW\*(C`CXp_FOR_GV\*(C'\fR flags have been added, and
+\&\f(CW\*(C`CXt_LOOP_FOR\*(C'\fR has been split into \f(CW\*(C`CXt_LOOP_LIST\*(C'\fR, \f(CW\*(C`CXt_LOOP_ARY\*(C'\fR.
+.IP \(bu 4
+Some variables formerly declared by \f(CW\*(C`dMULTICALL\*(C'\fR (but not documented) have
+been removed.
+.RE
+.RS 4
+.RE
+.IP \(bu 4
+The obscure \f(CW\*(C`PL_timesbuf\*(C'\fR 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.
+[GH #13632] <https://github.com/Perl/perl5/issues/13632>
+.IP \(bu 4
+An unwarranted assertion in \f(CWPerl_newATTRSUB_x()\fR has been removed. 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.
+[GH #15081] <https://github.com/Perl/perl5/issues/15081>
+.IP \(bu 4
+\&\f(CW\*(C`::\*(C'\fR has been replaced by \f(CW\*(C`_\|_\*(C'\fR in \f(CW\*(C`ExtUtils::ParseXS\*(C'\fR, 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 \f(CW\*(C`Foo_\|_Bar\*(C'\fR rather than two, one for \f(CW\*(C`Foo_Bar\*(C'\fR and the other
+for \f(CW\*(C`Foo::Bar\*(C'\fR).
+.IP \(bu 4
+The \f(CWto_utf8_case()\fR function is now deprecated. Instead use
+\&\f(CW\*(C`toUPPER_utf8\*(C'\fR, \f(CW\*(C`toTITLE_utf8\*(C'\fR, \f(CW\*(C`toLOWER_utf8\*(C'\fR, and \f(CW\*(C`toFOLD_utf8\*(C'\fR.
+(See <http://nntp.perl.org/group/perl.perl5.porters/233287>.)
+.IP \(bu 4
+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 <http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more
+information.
+.IP \(bu 4
+The \f(CWsignbit()\fR emulation has been enhanced. This will help older
+and/or more exotic platforms or configurations.
+.IP \(bu 4
+Most EBCDIC-specific code in the core has been unified with non-EBCDIC
+code, to avoid repetition and make maintenance easier.
+.IP \(bu 4
+MSWin32 code for \f(CW$^X\fR has been moved out of the \fIwin32\fR directory to
+\&\fIcaretx.c\fR, where other operating systems set that variable.
+.IP \(bu 4
+\&\f(CWsv_ref()\fR is now part of the API.
+.IP \(bu 4
+"sv_backoff" in perlapi had its return type changed from \f(CW\*(C`int\*(C'\fR to \f(CW\*(C`void\*(C'\fR. It
+previously has always returned \f(CW0\fR since Perl 5.000 stable but that was
+undocumented. Although \f(CW\*(C`sv_backoff\*(C'\fR is marked as public API, XS code is not
+expected to be impacted since the proper API call would be through public API
+\&\f(CW\*(C`sv_setsv(sv, &PL_sv_undef)\*(C'\fR, or quasi-public \f(CW\*(C`SvOOK_off\*(C'\fR, or non-public
+\&\f(CW\*(C`SvOK_off\*(C'\fR calls, and the return value of \f(CW\*(C`sv_backoff\*(C'\fR was previously a
+meaningless constant that can be rewritten as \f(CW\*(C`(sv_backoff(sv),0)\*(C'\fR.
+.IP \(bu 4
+The \f(CW\*(C`EXTEND\*(C'\fR and \f(CW\*(C`MEXTEND\*(C'\fR 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 \f(CW\*(C`nitems\*(C'\fR argument is likely to raise a compiler warning now
+(it's always been documented to require a signed value; formerly int,
+lately SSize_t).
+.IP \(bu 4
+\&\f(CW\*(C`PL_sawalias\*(C'\fR and \f(CW\*(C`GPf_ALIASED_SV\*(C'\fR have been removed.
+.IP \(bu 4
+\&\f(CW\*(C`GvASSIGN_GENERATION\*(C'\fR and \f(CW\*(C`GvASSIGN_GENERATION_set\*(C'\fR have been removed.
+.SH "Selected Bug Fixes"
+.IX Header "Selected Bug Fixes"
+.IP \(bu 4
+It now works properly to specify a user-defined property, such as
+.Sp
+.Vb 1
+\& qr/\ep{mypkg1::IsMyProperty}/i
+.Ve
+.Sp
+with \f(CW\*(C`/i\*(C'\fR caseless matching, an explicit package name, and
+\&\fIIsMyProperty\fR not defined at the time of the pattern compilation.
+.IP \(bu 4
+Perl's \f(CWmemcpy()\fR, \f(CWmemmove()\fR, \f(CWmemset()\fR and \f(CWmemcmp()\fR fallbacks are now
+more compatible with the originals. [perl #127619]
+.IP \(bu 4
+Fixed the issue where a \f(CW\*(C`s///r\*(C'\fR) with \fB\-DPERL_NO_COW\fR attempts
+to modify the source SV, resulting in the program dying. [perl #127635]
+.IP \(bu 4
+Fixed an EBCDIC-platform-only case where a pattern could fail to match. This
+occurred when matching characters from the set of C1 controls when the
+target matched string was in UTF\-8.
+.IP \(bu 4
+Narrow the filename check in \fIstrict.pm\fR and \fIwarnings.pm\fR. Previously,
+it assumed that if the filename (without the \fI.pmc?\fR extension) differed
+from the package name, if was a misspelled use statement (i.e. \f(CW\*(C`use Strict\*(C'\fR
+instead of \f(CW\*(C`use strict\*(C'\fR). We now check whether there's really a
+miscapitalization happening, and not some other issue.
+.IP \(bu 4
+Turn an assertion into a more user friendly failure when parsing
+regexes. [perl #127599]
+.IP \(bu 4
+Correctly raise an error when trying to compile patterns with
+unterminated character classes while there are trailing backslashes.
+[perl #126141].
+.IP \(bu 4
+Line numbers larger than 2**31\-1 but less than 2**32 are no longer
+returned by \f(CWcaller()\fR as negative numbers. [perl #126991]
+.IP \(bu 4
+\&\f(CW\*(C`unless ( \fR\f(CIassignment\fR\f(CW )\*(C'\fR now properly warns when syntax
+warnings are enabled. [perl #127122]
+.IP \(bu 4
+Setting an \f(CW\*(C`ISA\*(C'\fR glob to an array reference now properly adds
+\&\f(CW\*(C`isaelem\*(C'\fR 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 \f(CW\*(C`ISA\*(C'\fR glob was
+destroyed, since new code added in 5.23.7 would try to release the
+\&\f(CW\*(C`isaelem\*(C'\fR magic from the elements. [perl #127351]
+.IP \(bu 4
+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]
+.IP \(bu 4
+\&\f(CWuntie()\fR would sometimes return the last value returned by the \f(CWUNTIE()\fR
+handler as well as its normal value, messing up the stack. [perl
+#126621]
+.IP \(bu 4
+Fixed an operator precedence problem when \f(CW\*(C` castflags & 2\*(C'\fR is true.
+[perl #127474]
+.IP \(bu 4
+Caching of DESTROY methods could result in a non-pointer or a
+non-STASH stored in the \f(CWSvSTASH()\fR slot of a stash, breaking the B
+\&\f(CWSTASH()\fR method. The DESTROY method is now cached in the MRO metadata
+for the stash. [perl #126410]
+.IP \(bu 4
+The AUTOLOAD method is now called when searching for a DESTROY method,
+and correctly sets \f(CW$AUTOLOAD\fR too. [perl #124387] [perl #127494]
+.IP \(bu 4
+Avoid parsing beyond the end of the buffer when processing a \f(CW\*(C`#line\*(C'\fR
+directive with no filename. [perl #127334]
+.IP \(bu 4
+Perl now raises a warning when a regular expression pattern looks like
+it was supposed to contain a POSIX class, like \f(CW\*(C`qr/[[:alpha:]]/\*(C'\fR, 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:
+\&\f(CW\*(C`qr/[[:alpha]]/\*(C'\fR. This compiles to match a sequence of two characters.
+The second is \f(CW"]"\fR, and the first is any of: \f(CW"["\fR, \f(CW":"\fR, \f(CW"a"\fR,
+\&\f(CW"h"\fR, \f(CW"l"\fR, or \f(CW"p"\fR. 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
+"POSIX Character Classes" in perlrecharclass.)
+[perl #8904]
+.IP \(bu 4
+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 \f(CW\*(C`qr/_?[^\eWbar]\ex{100}/\*(C'\fR. This has been fixed.
+[perl #127537]
+.IP \(bu 4
+Perl 5.22 added support to the C99 hexadecimal floating point notation,
+but sometimes misparses hex floats. This has been fixed.
+[perl #127183]
+.IP \(bu 4
+A regression that allowed undeclared barewords in hash keys to work despite
+strictures has been fixed.
+[GH #15099] <https://github.com/Perl/perl5/issues/15099>
+.IP \(bu 4
+Calls to the placeholder \f(CW&PL_sv_yes\fR used internally when an \f(CWimport()\fR
+or \f(CWunimport()\fR method isn't found now correctly handle scalar context.
+[GH #14902] <https://github.com/Perl/perl5/issues/14902>
+.IP \(bu 4
+Report more context when we see an array where we expect to see an
+operator and avoid an assertion failure.
+[GH #14472] <https://github.com/Perl/perl5/issues/14472>
+.IP \(bu 4
+Modifying an array that was previously a package \f(CW@ISA\fR no longer
+causes assertion failures or crashes.
+[GH #14492] <https://github.com/Perl/perl5/issues/14492>
+.IP \(bu 4
+Retain binary compatibility across plain and DEBUGGING perl builds.
+[GH #15122] <https://github.com/Perl/perl5/issues/15122>
+.IP \(bu 4
+Avoid leaking memory when setting \f(CW$ENV{foo}\fR on darwin.
+[GH #14955] <https://github.com/Perl/perl5/issues/14955>
+.IP \(bu 4
+\&\f(CW\*(C`/...\eG/\*(C'\fR no longer crashes on utf8 strings. When \f(CW\*(C`\eG\*(C'\fR is a fixed number
+of characters from the start of the regex, perl needs to count back that
+many characters from the current \f(CWpos()\fR position and start matching from
+there. However, it was counting back bytes rather than characters, which
+could lead to panics on utf8 strings.
+.IP \(bu 4
+In some cases operators that return integers would return negative
+integers as large positive integers.
+[GH #15049] <https://github.com/Perl/perl5/issues/15049>
+.IP \(bu 4
+The \f(CWpipe()\fR 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.
+[GH #15015] <https://github.com/Perl/perl5/issues/15015>
+.IP \(bu 4
+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.
+[GH #15009] <https://github.com/Perl/perl5/issues/15009>
+.IP \(bu 4
+\&\f(CW\*(C`@x = sort { *a = 0; $a <=> $b } 0 .. 1\*(C'\fR no longer frees the GP
+for *a before restoring its SV slot.
+[GH #14595] <https://github.com/Perl/perl5/issues/14595>
+.IP \(bu 4
+Multiple problems with the new hexadecimal floating point printf
+format \f(CW%a\fR were fixed:
+[GH #15032] <https://github.com/Perl/perl5/issues/15032>,
+[GH #15033] <https://github.com/Perl/perl5/issues/15033>,
+[GH #15074] <https://github.com/Perl/perl5/issues/15074>
+.IP \(bu 4
+Calling \f(CWmg_set()\fR in \f(CWleave_scope()\fR no longer leaks.
+.IP \(bu 4
+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.)
+.IP \(bu 4
+\&\f(CW\*(C`\eb{sb}\*(C'\fR 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.
+.IP \(bu 4
+Certain syntax errors in
+"Extended Bracketed Character Classes" in perlrecharclass caused panics
+instead of the proper error message. This has now been fixed. [perl
+#126481]
+.IP \(bu 4
+Perl 5.20 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]
+.IP \(bu 4
+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.
+.IP \(bu 4
+Improved parsing of hex float constants.
+.IP \(bu 4
+Fixed an issue with \f(CW\*(C`pack\*(C'\fR where \f(CW\*(C`pack "H"\*(C'\fR (and \f(CW\*(C`pack "h"\*(C'\fR)
+could read past the source when given a non\-utf8 source, and a utf8 target.
+[perl #126325]
+.IP \(bu 4
+Fixed several cases where perl would abort due to a segmentation fault,
+or a C\-level assert. [perl #126615], [perl #126602], [perl #126193].
+.IP \(bu 4
+There were places in regular expression patterns where comments (\f(CW\*(C`(?#...)\*(C'\fR)
+weren't allowed, but should have been. This is now fixed.
+[GH #12755] <https://github.com/Perl/perl5/issues/12755>
+.IP \(bu 4
+Some regressions from Perl 5.20 have been fixed, in which some syntax errors in
+\&\f(CW\*(C`(?[...])\*(C'\fR constructs
+within regular expression patterns could cause a segfault instead of a proper
+error message.
+[GH #14933] <https://github.com/Perl/perl5/issues/14933>
+[GH #14996] <https://github.com/Perl/perl5/issues/14996>
+.IP \(bu 4
+Another problem with
+\&\f(CW\*(C`(?[...])\*(C'\fR
+constructs has been fixed wherein things like \f(CW\*(C`\ec]\*(C'\fR could cause panics.
+[GH #14934] <https://github.com/Perl/perl5/issues/14934>
+.IP \(bu 4
+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.
+.Sp
+.Vb 1
+\& @a = (1) x $big_number
+.Ve
+.Sp
+Formerly perl may have crashed, depending on the exact value of \f(CW$big_number\fR;
+now it will typically raise an exception.
+[GH #14880] <https://github.com/Perl/perl5/issues/14880>
+.IP \(bu 4
+In a regex conditional expression \f(CW\*(C`(?(condition)yes\-pattern|no\-pattern)\*(C'\fR, if
+the condition is \f(CW\*(C`(?!)\*(C'\fR then perl failed the match outright instead of
+matching the no-pattern. This has been fixed.
+[GH #14947] <https://github.com/Perl/perl5/issues/14947>
+.IP \(bu 4
+The special backtracking control verbs \f(CW\*(C`(*VERB:ARG)\*(C'\fR now all allow an optional
+argument and set \f(CW\*(C`REGERROR\*(C'\fR/\f(CW\*(C`REGMARK\*(C'\fR appropriately as well.
+[GH #14937] <https://github.com/Perl/perl5/issues/14937>
+.IP \(bu 4
+Several bugs, including a segmentation fault, have been fixed with the boundary
+checking constructs (introduced in Perl 5.22) \f(CW\*(C`\eb{gcb}\*(C'\fR, \f(CW\*(C`\eb{sb}\*(C'\fR, \f(CW\*(C`\eb{wb}\*(C'\fR,
+\&\f(CW\*(C`\eB{gcb}\*(C'\fR, \f(CW\*(C`\eB{sb}\*(C'\fR, and \f(CW\*(C`\eB{wb}\*(C'\fR. All the \f(CW\*(C`\eB{}\*(C'\fR ones now match an empty
+string; none of the \f(CW\*(C`\eb{}\*(C'\fR ones do.
+[GH #14976] <https://github.com/Perl/perl5/issues/14976>
+.IP \(bu 4
+Duplicating a closed file handle for write no longer creates a
+filename of the form \fIGLOB(0xXXXXXXXX)\fR. [perl #125115]
+.IP \(bu 4
+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]
+.IP \(bu 4
+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]
+.IP \(bu 4
+The PadlistNAMES macro is an lvalue again.
+.IP \(bu 4
+Zero \-DPERL_TRACE_OPS memory for sub-threads.
+.Sp
+\&\f(CWperl_clone_using()\fR 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 \f(CW%x\fR as "ABABABAB",
+clearly a mem-poison value.
+.IP \(bu 4
+A leak in the XS typemap caused one scalar to be leaked each time a \f(CW\*(C`FILE *\*(C'\fR
+or a \f(CW\*(C`PerlIO *\*(C'\fR was \f(CW\*(C`OUTPUT:\*(C'\fRed or imported to Perl, since perl 5.000. These
+particular typemap entries are thought to be extremely rarely used by XS
+modules. [perl #124181]
+.IP \(bu 4
+\&\f(CWalarm()\fR and \f(CWsleep()\fR 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.
+.IP \(bu 4
+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
+\&\f(CW\*(C`Name_Alias\*(C'\fR did not exist prior to Unicode 5.0. Unicode::UCD
+incorrectly said it did. This has been fixed.
+.IP \(bu 4
+Very large code-points (beyond Unicode) in regular expressions no
+longer cause a buffer overflow in some cases when converted to UTF\-8.
+[GH #14858] <https://github.com/Perl/perl5/issues/14858>
+.IP \(bu 4
+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.
+[GH #14843] <https://github.com/Perl/perl5/issues/14843>
+.IP \(bu 4
+A crash with \f(CW\*(C`%::=(); J\->${\e"::"}\*(C'\fR has been fixed.
+[GH #14790] <https://github.com/Perl/perl5/issues/14790>
+.IP \(bu 4
+\&\f(CW\*(C`qr/(?[ () ])/\*(C'\fR no longer segfaults, giving a syntax error message instead.
+[perl #125805]
+.IP \(bu 4
+Regular expression possessive quantifier v5.20 regression now fixed.
+\&\f(CW\*(C`qr/\*(C'\fR\fIPAT\fR\f(CW\*(C`{\*(C'\fR\fImin\fR,\fImax\fR\f(CW\*(C`}+\*(C'\fR\f(CW\*(C`/\*(C'\fR is supposed to behave identically
+to \f(CW\*(C`qr/(?>\*(C'\fR\fIPAT\fR\f(CW\*(C`{\*(C'\fR\fImin\fR,\fImax\fR\f(CW\*(C`})/\*(C'\fR. Since v5.20, this didn't
+work if \fImin\fR and \fImax\fR were equal. [perl #125825]
+.IP \(bu 4
+\&\f(CW\*(C`BEGIN <>\*(C'\fR no longer segfaults and properly produces an error
+message. [perl #125341]
+.IP \(bu 4
+In \f(CW\*(C`tr///\*(C'\fR an illegal backwards range like \f(CW\*(C`tr/\ex{101}\-\ex{100}//\*(C'\fR was
+not always detected, giving incorrect results. This is now fixed.
+.SH Acknowledgements
+.IX Header "Acknowledgements"
+Perl 5.24.0 represents approximately 11 months of development since Perl 5.24.0
+and contains approximately 360,000 lines of changes across 1,800 files from 75
+authors.
+.PP
+Excluding auto-generated files, documentation and release tools, there were
+approximately 250,000 lines of changes to 1,200 .pm, .t, .c and .h files.
+.PP
+Perl continues to flourish into its third decade thanks to a vibrant community
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.24.0:
+.PP
+Aaron Crane, Aaron Priven, Abigail, Achim Gratz, Alexander D'Archangel, Alex
+Vandiver, Andreas König, Andy Broad, Andy Dougherty, Aristotle Pagaltzis,
+Chase Whitener, Chas. Owens, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn
+Ilmari Mannsåker, Dan Collins, Daniel Dragan, David Golden, David Mitchell,
+Doug Bell, Dr.Ruud, Ed Avis, Ed J, Father Chrysostomos, Herbert Breunung,
+H.Merijn Brand, Hugo van der Sanden, Ivan Pozdeev, James E Keenan, Jan Dubois,
+Jarkko Hietaniemi, Jerry D. Hedden, Jim Cromie, John Peacock, John SJ Anderson,
+Karen Etheridge, Karl Williamson, kmx, Leon Timmermans, Ludovic E. R.
+Tolhurst-Cleaver, Lukas Mai, Martijn Lievaart, Matthew Horsfall, Mattia Barbon,
+Max Maischein, Mohammed El-Afifi, Nicholas Clark, Nicolas R., Niko Tyni, Peter
+John Acklam, Peter Martini, Peter Rabbitson, Pip Cet, Rafael Garcia-Suarez,
+Reini Urban, Ricardo Signes, Sawyer X, Shlomi Fish, Sisyphus, Stanislaw Pusep,
+Steffen Müller, Stevan Little, Steve Hay, Sullivan Beck, Thomas Sibley, Todd
+Rinaldo, Tom Hukins, Tony Cook, Unicode Consortium, Victor Adam, Vincent Pit,
+Vladimir Timofeev, Yves Orton, Zachary Storer, Zefram.
+.PP
+The list above is almost certainly incomplete as it is automatically generated
+from version control history. In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+.PP
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+.PP
+For a more complete list of all of Perl's historical contributors, please see
+the \fIAUTHORS\fR file in the Perl source distribution.
+.SH "Reporting Bugs"
+.IX Header "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.
+.PP
+If you believe you have an unreported bug, please run the 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 \f(CW\*(C`perl \-V\*(C'\fR,
+will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
+.PP
+If the bug you are reporting has security implications which make it
+inappropriate to send to a publicly archived mailing list, then see
+"SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec
+for details of how to report the issue.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The \fIChanges\fR file for an explanation of how to view exhaustive details on
+what changed.
+.PP
+The \fIINSTALL\fR file for how to build Perl.
+.PP
+The \fIREADME\fR file for general stuff.
+.PP
+The \fIArtistic\fR and \fICopying\fR files for copyright information.