summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man1/perl5260delta.1
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/mageia-cauldron/man1/perl5260delta.1')
-rw-r--r--upstream/mageia-cauldron/man1/perl5260delta.12481
1 files changed, 2481 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perl5260delta.1 b/upstream/mageia-cauldron/man1/perl5260delta.1
new file mode 100644
index 00000000..39769e74
--- /dev/null
+++ b/upstream/mageia-cauldron/man1/perl5260delta.1
@@ -0,0 +1,2481 @@
+.\" -*- 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 "PERL5260DELTA 1"
+.TH PERL5260DELTA 1 2023-11-28 "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
+perl5260delta \- what is new for perl v5.26.0
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This document describes the differences between the 5.24.0 release and the
+5.26.0 release.
+.SH Notice
+.IX Header "Notice"
+This release includes three updates with widespread effects:
+.IP \(bu 4
+\&\f(CW"."\fR no longer in \f(CW@INC\fR
+.Sp
+For security reasons, the current directory (\f(CW"."\fR) is no longer included
+by default at the end of the module search path (\f(CW@INC\fR). This may have
+widespread implications for the building, testing and installing of
+modules, and for the execution of scripts. See the section
+"Removal of the current directory (\f(CW"."\fR) from \f(CW@INC\fR"
+for the full details.
+.IP \(bu 4
+\&\f(CW\*(C`do\*(C'\fR may now warn
+.Sp
+\&\f(CW\*(C`do\*(C'\fR now gives a deprecation warning when it fails to load a file which
+it would have loaded had \f(CW"."\fR been in \f(CW@INC\fR.
+.IP \(bu 4
+In regular expression patterns, a literal left brace \f(CW"{"\fR
+should be escaped
+.Sp
+See "Unescaped literal \f(CW"{"\fR characters in regular expression patterns are no longer permissible".
+.SH "Core Enhancements"
+.IX Header "Core Enhancements"
+.SS "Lexical subroutines are no longer experimental"
+.IX Subsection "Lexical subroutines are no longer experimental"
+Using the \f(CW\*(C`lexical_subs\*(C'\fR feature introduced in v5.18 no longer emits a warning. Existing
+code that disables the \f(CW\*(C`experimental::lexical_subs\*(C'\fR warning category
+that the feature previously used will continue to work. The
+\&\f(CW\*(C`lexical_subs\*(C'\fR feature has no effect; all Perl code can use lexical
+subroutines, regardless of what feature declarations are in scope.
+.SS "Indented Here-documents"
+.IX Subsection "Indented Here-documents"
+This adds a new modifier \f(CW"~"\fR to here-docs that tells the parser
+that it should look for \f(CW\*(C`/^\es*$DELIM\en/\*(C'\fR as the closing delimiter.
+.PP
+These syntaxes are all supported:
+.PP
+.Vb 8
+\& <<~EOF;
+\& <<~\eEOF;
+\& <<~\*(AqEOF\*(Aq;
+\& <<~"EOF";
+\& <<~\`EOF\`;
+\& <<~ \*(AqEOF\*(Aq;
+\& <<~ "EOF";
+\& <<~ \`EOF\`;
+.Ve
+.PP
+The \f(CW"~"\fR modifier will strip, from each line in the here-doc, the
+same whitespace that appears before the delimiter.
+.PP
+Newlines will be copied as-is, and lines that don't include the
+proper beginning whitespace will cause perl to croak.
+.PP
+For example:
+.PP
+.Vb 5
+\& if (1) {
+\& print <<~EOF;
+\& Hello there
+\& EOF
+\& }
+.Ve
+.PP
+prints "Hello there\en" with no leading whitespace.
+.ie n .SS "New regular expression modifier ""/xx"""
+.el .SS "New regular expression modifier \f(CW/xx\fP"
+.IX Subsection "New regular expression modifier /xx"
+Specifying two \f(CW"x"\fR characters to modify a regular expression pattern
+does everything that a single one does, but additionally TAB and SPACE
+characters within a bracketed character class are generally ignored and
+can be added to improve readability, like
+\&\f(CW\*(C`/[\ ^\ A\-Z\ d\-f\ p\-x\ ]/xx\*(C'\fR. Details are at
+"/x and /xx" in perlre.
+.ie n .SS """@{^CAPTURE}"", ""%{^CAPTURE}"", and ""%{^CAPTURE_ALL}"""
+.el .SS "\f(CW@{^CAPTURE}\fP, \f(CW%{^CAPTURE}\fP, and \f(CW%{^CAPTURE_ALL}\fP"
+.IX Subsection "@{^CAPTURE}, %{^CAPTURE}, and %{^CAPTURE_ALL}"
+\&\f(CW\*(C`@{^CAPTURE}\*(C'\fR exposes the capture buffers of the last match as an
+array. So \f(CW$1\fR is \f(CW\*(C`${^CAPTURE}[0]\*(C'\fR. This is a more efficient equivalent
+to code like \f(CW\*(C`substr($matched_string,$\-[0],$+[0]\-$\-[0])\*(C'\fR, and you don't
+have to keep track of the \f(CW$matched_string\fR either. This variable has no
+single character equivalent. Note that, like the other regex magic variables,
+the contents of this variable is dynamic; if you wish to store it beyond
+the lifetime of the match you must copy it to another array.
+.PP
+\&\f(CW\*(C`%{^CAPTURE}\*(C'\fR is equivalent to \f(CW\*(C`%+\*(C'\fR (\fIi.e.\fR, named captures). Other than
+being more self-documenting there is no difference between the two forms.
+.PP
+\&\f(CW\*(C`%{^CAPTURE_ALL}\*(C'\fR is equivalent to \f(CW\*(C`%\-\*(C'\fR (\fIi.e.\fR, all named captures).
+Other than being more self-documenting there is no difference between the
+two forms.
+.SS "Declaring a reference to a variable"
+.IX Subsection "Declaring a reference to a variable"
+As an experimental feature, Perl now allows the referencing operator to come
+after \f(CWmy()\fR, \f(CWstate()\fR,
+\&\f(CWour()\fR, or \f(CWlocal()\fR. This syntax must
+be enabled with \f(CW\*(C`use feature \*(Aqdeclared_refs\*(Aq\*(C'\fR. It is experimental, and will
+warn by default unless \f(CW\*(C`no warnings \*(Aqexperimental::refaliasing\*(Aq\*(C'\fR is in effect.
+It is intended mainly for use in assignments to references. For example:
+.PP
+.Vb 2
+\& use experimental \*(Aqrefaliasing\*(Aq, \*(Aqdeclared_refs\*(Aq;
+\& my \e$a = \e$b;
+.Ve
+.PP
+See "Assigning to References" in perlref for more details.
+.SS "Unicode 9.0 is now supported"
+.IX Subsection "Unicode 9.0 is now supported"
+A list of changes is at <http://www.unicode.org/versions/Unicode9.0.0/>.
+Modules that are shipped with core Perl but not maintained by p5p do not
+necessarily support Unicode 9.0. Unicode::Normalize does work on 9.0.
+.ie n .SS "Use of ""\ep{\fIscript\fP}"" uses the improved Script_Extensions property"
+.el .SS "Use of \f(CW\ep{\fP\f(CIscript\fP\f(CW}\fP uses the improved Script_Extensions property"
+.IX Subsection "Use of p{script} uses the improved Script_Extensions property"
+Unicode 6.0 introduced an improved form of the Script (\f(CW\*(C`sc\*(C'\fR) property, and
+called it Script_Extensions (\f(CW\*(C`scx\*(C'\fR). Perl now uses this improved
+version when a property is specified as just \f(CW\*(C`\ep{\fR\f(CIscript\fR\f(CW}\*(C'\fR. This
+should make programs more accurate when determining if a character is
+used in a given script, but there is a slight chance of breakage for
+programs that very specifically needed the old behavior. The meaning of
+compound forms, like \f(CW\*(C`\ep{sc=\fR\f(CIscript\fR\f(CW}\*(C'\fR are unchanged. See
+"Scripts" in perlunicode.
+.SS "Perl can now do default collation in UTF\-8 locales on platforms that support it"
+.IX Subsection "Perl can now do default collation in UTF-8 locales on platforms that support it"
+Some platforms natively do a reasonable job of collating and sorting in
+UTF\-8 locales. Perl now works with those. For portability and full
+control, Unicode::Collate is still recommended, but now you may
+not need to do anything special to get good-enough results, depending on
+your application. See
+"Category \f(CW\*(C`LC_COLLATE\*(C'\fR: Collation: Text Comparisons and Sorting" in perllocale.
+.ie n .SS "Better locale collation of strings containing embedded ""NUL"" characters"
+.el .SS "Better locale collation of strings containing embedded \f(CWNUL\fP characters"
+.IX Subsection "Better locale collation of strings containing embedded NUL characters"
+In locales that have multi-level character weights, \f(CW\*(C`NUL\*(C'\fRs are now
+ignored at the higher priority ones. There are still some gotchas in
+some strings, though. See
+"Collation of strings containing embedded \f(CW\*(C`NUL\*(C'\fR characters" in perllocale.
+.ie n .SS """CORE"" subroutines for hash and array functions callable via reference"
+.el .SS "\f(CWCORE\fP subroutines for hash and array functions callable via reference"
+.IX Subsection "CORE subroutines for hash and array functions callable via reference"
+The hash and array functions in the \f(CW\*(C`CORE\*(C'\fR namespace (\f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`each\*(C'\fR,
+\&\f(CW\*(C`values\*(C'\fR, \f(CW\*(C`push\*(C'\fR, \f(CW\*(C`pop\*(C'\fR, \f(CW\*(C`shift\*(C'\fR, \f(CW\*(C`unshift\*(C'\fR and \f(CW\*(C`splice\*(C'\fR) can now
+be called with ampersand syntax (\f(CW\*(C`&CORE::keys(\e%hash\*(C'\fR) and via reference
+(\f(CW\*(C`my $k = \e&CORE::keys; $k\->(\e%hash)\*(C'\fR). Previously they could only be
+used when inlined.
+.SS "New Hash Function For 64\-bit Builds"
+.IX Subsection "New Hash Function For 64-bit Builds"
+We have switched to a hybrid hash function to better balance
+performance for short and long keys.
+.PP
+For short keys, 16 bytes and under, we use an optimised variant of
+One At A Time Hard, and for longer keys we use Siphash 1\-3. For very
+long keys this is a big improvement in performance. For shorter keys
+there is a modest improvement.
+.SH Security
+.IX Header "Security"
+.ie n .SS "Removal of the current directory (""."") from @INC"
+.el .SS "Removal of the current directory (\f(CW"".""\fP) from \f(CW@INC\fP"
+.IX Subsection "Removal of the current directory (""."") from @INC"
+The perl binary includes a default set of paths in \f(CW@INC\fR. Historically
+it has also included the current directory (\f(CW"."\fR) as the final entry,
+unless run with taint mode enabled (\f(CW\*(C`perl \-T\*(C'\fR). While convenient, this has
+security implications: for example, where a script attempts to load an
+optional module when its current directory is untrusted (such as \fI/tmp\fR),
+it could load and execute code from under that directory.
+.PP
+Starting with v5.26, \f(CW"."\fR is always removed by default, not just under
+tainting. This has major implications for installing modules and executing
+scripts.
+.PP
+The following new features have been added to help ameliorate these
+issues.
+.IP \(bu 4
+\&\fIConfigure \-Udefault_inc_excludes_dot\fR
+.Sp
+There is a new \fIConfigure\fR option, \f(CW\*(C`default_inc_excludes_dot\*(C'\fR (enabled
+by default) which builds a perl executable without \f(CW"."\fR; unsetting this
+option using \f(CW\*(C`\-U\*(C'\fR reverts perl to the old behaviour. This may fix your
+path issues but will reintroduce all the security concerns, so don't
+build a perl executable like this unless you're \fIreally\fR confident that
+such issues are not a concern in your environment.
+.IP \(bu 4
+\&\f(CW\*(C`PERL_USE_UNSAFE_INC\*(C'\fR
+.Sp
+There is a new environment variable recognised by the perl interpreter.
+If this variable has the value 1 when the perl interpreter starts up,
+then \f(CW"."\fR will be automatically appended to \f(CW@INC\fR (except under tainting).
+.Sp
+This allows you restore the old perl interpreter behaviour on a
+case-by-case basis. But note that this is intended to be a temporary crutch,
+and this feature will likely be removed in some future perl version.
+It is currently set by the \f(CW\*(C`cpan\*(C'\fR utility and \f(CW\*(C`Test::Harness\*(C'\fR to
+ease installation of CPAN modules which have not been updated to handle the
+lack of dot. Once again, don't use this unless you are sure that this
+will not reintroduce any security concerns.
+.IP \(bu 4
+A new deprecation warning issued by \f(CW\*(C`do\*(C'\fR.
+.Sp
+While it is well-known that \f(CW\*(C`use\*(C'\fR and \f(CW\*(C`require\*(C'\fR use \f(CW@INC\fR to search
+for the file to load, many people don't realise that \f(CW\*(C`do "file"\*(C'\fR also
+searches \f(CW@INC\fR if the file is a relative path. With the removal of \f(CW"."\fR,
+a simple \f(CW\*(C`do "file.pl"\*(C'\fR will fail to read in and execute \f(CW\*(C`file.pl\*(C'\fR from
+the current directory. Since this is commonly expected behaviour, a new
+deprecation warning is now issued whenever \f(CW\*(C`do\*(C'\fR fails to load a file which
+it otherwise would have found if a dot had been in \f(CW@INC\fR.
+.PP
+Here are some things script and module authors may need to do to make
+their software work in the new regime.
+.IP \(bu 4
+Script authors
+.Sp
+If the issue is within your own code (rather than within included
+modules), then you have two main options. Firstly, if you are confident
+that your script will only be run within a trusted directory (under which
+you expect to find trusted files and modules), then add \f(CW"."\fR back into the
+path; \fIe.g.\fR:
+.Sp
+.Vb 6
+\& BEGIN {
+\& my $dir = "/some/trusted/directory";
+\& chdir $dir or die "Can\*(Aqt chdir to $dir: $!\en";
+\& # safe now
+\& push @INC, \*(Aq.\*(Aq;
+\& }
+\&
+\& use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm
+\& do "config.pl"; # may load /some/trusted/directory/config.pl
+.Ve
+.Sp
+On the other hand, if your script is intended to be run from within
+untrusted directories (such as \fI/tmp\fR), then your script suddenly failing
+to load files may be indicative of a security issue. You most likely want
+to replace any relative paths with full paths; for example,
+.Sp
+.Vb 1
+\& do "foo_config.pl"
+.Ve
+.Sp
+might become
+.Sp
+.Vb 1
+\& do "$ENV{HOME}/foo_config.pl"
+.Ve
+.Sp
+If you are absolutely certain that you want your script to load and
+execute a file from the current directory, then use a \f(CW\*(C`./\*(C'\fR prefix; for
+example:
+.Sp
+.Vb 1
+\& do "./foo_config.pl"
+.Ve
+.IP \(bu 4
+Installing and using CPAN modules
+.Sp
+If you install a CPAN module using an automatic tool like \f(CW\*(C`cpan\*(C'\fR, then
+this tool will itself set the \f(CW\*(C`PERL_USE_UNSAFE_INC\*(C'\fR environment variable
+while building and testing the module, which may be sufficient to install
+a distribution which hasn't been updated to be dot-aware. If you want to
+install such a module manually, then you'll need to replace the
+traditional invocation:
+.Sp
+.Vb 1
+\& perl Makefile.PL && make && make test && make install
+.Ve
+.Sp
+with something like
+.Sp
+.Vb 2
+\& (export PERL_USE_UNSAFE_INC=1; \e
+\& perl Makefile.PL && make && make test && make install)
+.Ve
+.Sp
+Note that this only helps build and install an unfixed module. It's
+possible for the tests to pass (since they were run under
+\&\f(CW\*(C`PERL_USE_UNSAFE_INC=1\*(C'\fR), but for the module itself to fail to perform
+correctly in production. In this case, you may have to temporarily modify
+your script until a fixed version of the module is released.
+For example:
+.Sp
+.Vb 6
+\& use Foo::Bar;
+\& {
+\& local @INC = (@INC, \*(Aq.\*(Aq);
+\& # assuming read_config() needs \*(Aq.\*(Aq in @INC
+\& $config = Foo::Bar\->read_config();
+\& }
+.Ve
+.Sp
+This is only rarely expected to be necessary. Again, if doing this,
+assess the resultant risks first.
+.IP \(bu 4
+Module Authors
+.Sp
+If you maintain a CPAN distribution, it may need updating to run in
+a dotless environment. Although \f(CW\*(C`cpan\*(C'\fR and other such tools will
+currently set the \f(CW\*(C`PERL_USE_UNSAFE_INC\*(C'\fR during module build, this is a
+temporary workaround for the set of modules which rely on \f(CW"."\fR being in
+\&\f(CW@INC\fR for installation and testing, and this may mask deeper issues. It
+could result in a module which passes tests and installs, but which
+fails at run time.
+.Sp
+During build, test, and install, it will normally be the case that any perl
+processes will be executing directly within the root directory of the
+untarred distribution, or a known subdirectory of that, such as \fIt/\fR. It
+may well be that \fIMakefile.PL\fR or \fIt/foo.t\fR will attempt to include
+local modules and configuration files using their direct relative
+filenames, which will now fail.
+.Sp
+However, as described above, automatic tools like \fIcpan\fR will (for now)
+set the \f(CW\*(C`PERL_USE_UNSAFE_INC\*(C'\fR environment variable, which introduces
+dot during a build.
+.Sp
+This makes it likely that your existing build and test code will work, but
+this may mask issues with your code which only manifest when used after
+install. It is prudent to try and run your build process with that
+variable explicitly disabled:
+.Sp
+.Vb 2
+\& (export PERL_USE_UNSAFE_INC=0; \e
+\& perl Makefile.PL && make && make test && make install)
+.Ve
+.Sp
+This is more likely to show up any potential problems with your module's
+build process, or even with the module itself. Fixing such issues will
+ensure both that your module can again be installed manually, and that
+it will still build once the \f(CW\*(C`PERL_USE_UNSAFE_INC\*(C'\fR crutch goes away.
+.Sp
+When fixing issues in tests due to the removal of dot from \f(CW@INC\fR,
+reinsertion of dot into \f(CW@INC\fR should be performed with caution, for this
+too may suppress real errors in your runtime code. You are encouraged
+wherever possible to apply the aforementioned approaches with explicit
+absolute/relative paths, or to relocate your needed files into a
+subdirectory and insert that subdirectory into \f(CW@INC\fR instead.
+.Sp
+If your runtime code has problems under the dotless \f(CW@INC\fR, then the comments
+above on how to fix for script authors will mostly apply here too. Bear in
+mind though that it is considered bad form for a module to globally add a dot to
+\&\f(CW@INC\fR, since it introduces both a security risk and hides issues of
+accidentally requiring dot in \f(CW@INC\fR, as explained above.
+.SS "Escaped colons and relative paths in PATH"
+.IX Subsection "Escaped colons and relative paths in PATH"
+On Unix systems, Perl treats any relative paths in the \f(CW\*(C`PATH\*(C'\fR environment
+variable as tainted when starting a new process. Previously, it was
+allowing a backslash to escape a colon (unlike the OS), consequently
+allowing relative paths to be considered safe if the PATH was set to
+something like \f(CW\*(C`/\e:.\*(C'\fR. The check has been fixed to treat \f(CW"."\fR as tainted
+in that example.
+.ie n .SS "New ""\-Di"" switch is now required for PerlIO debugging output"
+.el .SS "New \f(CW\-Di\fP switch is now required for PerlIO debugging output"
+.IX Subsection "New -Di switch is now required for PerlIO debugging output"
+This is used for debugging of code within PerlIO to avoid recursive
+calls. Previously this output would be sent to the file specified
+by the \f(CW\*(C`PERLIO_DEBUG\*(C'\fR environment variable if perl wasn't running
+setuid and the \f(CW\*(C`\-T\*(C'\fR or \f(CW\*(C`\-t\*(C'\fR switches hadn't been parsed yet.
+.PP
+If perl performed output at a point where it hadn't yet parsed its
+switches this could result in perl creating or overwriting the file
+named by \f(CW\*(C`PERLIO_DEBUG\*(C'\fR even when the \f(CW\*(C`\-T\*(C'\fR switch had been supplied.
+.PP
+Perl now requires the \f(CW\*(C`\-Di\*(C'\fR switch to be present before it will produce
+PerlIO debugging
+output. By default this is written to \f(CW\*(C`stderr\*(C'\fR, but can optionally
+be redirected to a file by setting the \f(CW\*(C`PERLIO_DEBUG\*(C'\fR environment
+variable.
+.PP
+If perl is running setuid or the \f(CW\*(C`\-T\*(C'\fR switch was supplied,
+\&\f(CW\*(C`PERLIO_DEBUG\*(C'\fR is ignored and the debugging output is sent to
+\&\f(CW\*(C`stderr\*(C'\fR as for any other \f(CW\*(C`\-D\*(C'\fR switch.
+.SH "Incompatible Changes"
+.IX Header "Incompatible Changes"
+.ie n .SS "Unescaped literal ""{"" characters in regular expression patterns are no longer permissible"
+.el .SS "Unescaped literal \f(CW""{""\fP characters in regular expression patterns are no longer permissible"
+.IX Subsection "Unescaped literal ""{"" characters in regular expression patterns are no longer permissible"
+You have to now say something like \f(CW"\e{"\fR or \f(CW"[{]"\fR to specify to
+match a LEFT CURLY BRACKET; otherwise, it is a fatal pattern compilation
+error. This change will allow future extensions to the language.
+.PP
+These have been deprecated since v5.16, with a deprecation message
+raised for some uses starting in v5.22. Unfortunately, the code added
+to raise the message was buggy and failed to warn in some cases where
+it should have. Therefore, enforcement of this ban for these cases is
+deferred until Perl 5.30, but the code has been fixed to raise a
+default-on deprecation message for them in the meantime.
+.PP
+Some uses of literal \f(CW"{"\fR occur in contexts where we do not foresee
+the meaning ever being anything but the literal, such as the very first
+character in the pattern, or after a \f(CW"|"\fR meaning alternation. Thus
+.PP
+.Vb 1
+\& qr/{fee|{fie/
+.Ve
+.PP
+matches either of the strings \f(CW\*(C`{fee\*(C'\fR or \f(CW\*(C`{fie\*(C'\fR. To avoid forcing
+unnecessary code changes, these uses do not need to be escaped, and no
+warning is raised about them, and there are no current plans to change this.
+.PP
+But it is always correct to escape \f(CW"{"\fR, and the simple rule to
+remember is to always do so.
+.PP
+See Unescaped left brace in regex is illegal here.
+.ie n .SS "scalar(%hash) return signature changed"
+.el .SS "\f(CWscalar(%hash)\fP return signature changed"
+.IX Subsection "scalar(%hash) return signature changed"
+The value returned for \f(CWscalar(%hash)\fR will no longer show information about
+the buckets allocated in the hash. It will simply return the count of used
+keys. It is thus equivalent to \f(CW\*(C`0+keys(%hash)\*(C'\fR.
+.PP
+A form of backward compatibility is provided via
+\&\f(CWHash::Util::bucket_ratio()\fR which provides
+the same behavior as
+\&\f(CWscalar(%hash)\fR provided in Perl 5.24 and earlier.
+.ie n .SS """keys"" returned from an lvalue subroutine"
+.el .SS "\f(CWkeys\fP returned from an lvalue subroutine"
+.IX Subsection "keys returned from an lvalue subroutine"
+\&\f(CW\*(C`keys\*(C'\fR returned from an lvalue subroutine can no longer be assigned
+to in list context.
+.PP
+.Vb 4
+\& sub foo : lvalue { keys(%INC) }
+\& (foo) = 3; # death
+\& sub bar : lvalue { keys(@_) }
+\& (bar) = 3; # also an error
+.Ve
+.PP
+This makes the lvalue sub case consistent with \f(CW\*(C`(keys %hash) = ...\*(C'\fR and
+\&\f(CW\*(C`(keys @_) = ...\*(C'\fR, which are also errors.
+[GH #15339] <https://github.com/Perl/perl5/issues/15339>
+.ie n .SS "The ""${^ENCODING}"" facility has been removed"
+.el .SS "The \f(CW${^ENCODING}\fP facility has been removed"
+.IX Subsection "The ${^ENCODING} facility has been removed"
+The special behaviour associated with assigning a value to this variable
+has been removed. As a consequence, the encoding pragma's default mode
+is no longer supported. If
+you still need to write your source code in encodings other than UTF\-8, use a
+source filter such as Filter::Encoding on CPAN or encoding's \f(CW\*(C`Filter\*(C'\fR
+option.
+.ie n .SS "POSIX::tmpnam() has been removed"
+.el .SS "\f(CWPOSIX::tmpnam()\fP has been removed"
+.IX Subsection "POSIX::tmpnam() has been removed"
+The fundamentally unsafe \f(CWtmpnam()\fR interface was deprecated in
+Perl 5.22 and has now been removed. In its place, you can use,
+for example, the File::Temp interfaces.
+.SS "require ::Foo::Bar is now illegal."
+.IX Subsection "require ::Foo::Bar is now illegal."
+Formerly, \f(CW\*(C`require ::Foo::Bar\*(C'\fR would try to read \fI/Foo/Bar.pm\fR. Now any
+bareword require which starts with a double colon dies instead.
+.SS "Literal control character variable names are no longer permissible"
+.IX Subsection "Literal control character variable names are no longer permissible"
+A variable name may no longer contain a literal control character under
+any circumstances. These previously were allowed in single-character
+names on ASCII platforms, but have been deprecated there since Perl
+5.20. This affects things like \f(CW\*(C`$\fR\f(CI\ecT\fR\f(CW\*(C'\fR, where \fI\ecT\fR is a literal
+control (such as a \f(CW\*(C`NAK\*(C'\fR or \f(CW\*(C`NEGATIVE ACKNOWLEDGE\*(C'\fR character) in the
+source code.
+.ie n .SS """NBSP"" is no longer permissible in ""\eN{...}"""
+.el .SS "\f(CWNBSP\fP is no longer permissible in \f(CW\eN{...}\fP"
+.IX Subsection "NBSP is no longer permissible in N{...}"
+The name of a character may no longer contain non-breaking spaces. It
+has been deprecated to do so since Perl 5.22.
+.SH Deprecations
+.IX Header "Deprecations"
+.SS "String delimiters that aren't stand-alone graphemes are now deprecated"
+.IX Subsection "String delimiters that aren't stand-alone graphemes are now deprecated"
+For Perl to eventually allow string delimiters to be Unicode
+grapheme clusters (which look like a single character, but may be
+a sequence of several ones), we have to stop allowing a single character
+delimiter that isn't a grapheme by itself. These are unlikely to exist
+in actual code, as they would typically display as attached to the
+character in front of them.
+.ie n .SS """\ec\fIX\fP"" that maps to a printable is no longer deprecated"
+.el .SS "\f(CW\ec\fP\f(CIX\fP\f(CW\fP that maps to a printable is no longer deprecated"
+.IX Subsection "cX that maps to a printable is no longer deprecated"
+This means we have no plans to remove this feature. It still raises a
+warning, but only if syntax warnings are enabled. The feature was
+originally intended to be a way to express non-printable characters that
+don't have a mnemonic (\f(CW\*(C`\et\*(C'\fR and \f(CW\*(C`\en\*(C'\fR are mnemonics for two
+non-printable characters, but most non-printables don't have a
+mnemonic.) But the feature can be used to specify a few printable
+characters, though those are more clearly expressed as the printable
+itself. See
+<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html>.
+.SH "Performance Enhancements"
+.IX Header "Performance Enhancements"
+.IP \(bu 4
+A hash in boolean context is now sometimes faster, \fIe.g.\fR
+.Sp
+.Vb 1
+\& if (!%h) { ... }
+.Ve
+.Sp
+This was already special-cased, but some cases were missed (such as
+\&\f(CW\*(C`grep %$_, @AoH\*(C'\fR), and even the ones which weren't have been improved.
+.IP \(bu 4
+New Faster Hash Function on 64 bit builds
+.Sp
+We use a different hash function for short and long keys. This should
+improve performance and security, especially for long keys.
+.IP \(bu 4
+readline is faster
+.Sp
+Reading from a file line-by-line with \f(CWreadline()\fR or \f(CW\*(C`<>\*(C'\fR should
+now typically be faster due to a better implementation of the code that
+searches for the next newline character.
+.IP \(bu 4
+Assigning one reference to another, \fIe.g.\fR \f(CW\*(C`$ref1 = $ref2\*(C'\fR has been
+optimized in some cases.
+.IP \(bu 4
+Remove some exceptions to creating Copy-on-Write strings. The string
+buffer growth algorithm has been slightly altered so that you're less
+likely to encounter a string which can't be COWed.
+.IP \(bu 4
+Better optimise array and hash assignment: where an array or hash appears
+in the LHS of a list assignment, such as \f(CW\*(C`(..., @a) = (...);\*(C'\fR, it's
+likely to be considerably faster, especially if it involves emptying the
+array/hash. For example, this code runs about a third faster compared to
+Perl 5.24.0:
+.Sp
+.Vb 5
+\& my @a;
+\& for my $i (1..10_000_000) {
+\& @a = (1,2,3);
+\& @a = ();
+\& }
+.Ve
+.IP \(bu 4
+Converting a single-digit string to a number is now substantially faster.
+.IP \(bu 4
+The \f(CW\*(C`split\*(C'\fR builtin is now slightly faster in many cases: in particular
+for the two specially-handled forms
+.Sp
+.Vb 2
+\& my @a = split ...;
+\& local @a = split ...;
+.Ve
+.IP \(bu 4
+The rather slow implementation for the experimental subroutine signatures
+feature has been made much faster; it is now comparable in speed with the
+traditional \f(CW\*(C`my ($a, $b, @c) = @_\*(C'\fR.
+.IP \(bu 4
+Bareword constant strings are now permitted to take part in constant
+folding. They were originally exempted from constant folding in August 1999,
+during the development of Perl 5.6, to ensure that \f(CW\*(C`use strict "subs"\*(C'\fR
+would still apply to bareword constants. That has now been accomplished a
+different way, so barewords, like other constants, now gain the performance
+benefits of constant folding.
+.Sp
+This also means that void-context warnings on constant expressions of
+barewords now report the folded constant operand, rather than the operation;
+this matches the behaviour for non-bareword constants.
+.SH "Modules and Pragmata"
+.IX Header "Modules and Pragmata"
+.SS "Updated Modules and Pragmata"
+.IX Subsection "Updated Modules and Pragmata"
+.IP \(bu 4
+IO::Compress has been upgraded from version 2.069 to 2.074.
+.IP \(bu 4
+Archive::Tar has been upgraded from version 2.04 to 2.24.
+.IP \(bu 4
+arybase has been upgraded from version 0.11 to 0.12.
+.IP \(bu 4
+attributes has been upgraded from version 0.27 to 0.29.
+.Sp
+The deprecation message for the \f(CW\*(C`:unique\*(C'\fR and \f(CW\*(C`:locked\*(C'\fR attributes
+now mention that they will disappear in Perl 5.28.
+.IP \(bu 4
+B has been upgraded from version 1.62 to 1.68.
+.IP \(bu 4
+B::Concise has been upgraded from version 0.996 to 0.999.
+.Sp
+Its output is now more descriptive for \f(CW\*(C`op_private\*(C'\fR flags.
+.IP \(bu 4
+B::Debug has been upgraded from version 1.23 to 1.24.
+.IP \(bu 4
+B::Deparse has been upgraded from version 1.37 to 1.40.
+.IP \(bu 4
+B::Xref has been upgraded from version 1.05 to 1.06.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+base has been upgraded from version 2.23 to 2.25.
+.IP \(bu 4
+bignum has been upgraded from version 0.42 to 0.47.
+.IP \(bu 4
+Carp has been upgraded from version 1.40 to 1.42.
+.IP \(bu 4
+charnames has been upgraded from version 1.43 to 1.44.
+.IP \(bu 4
+Compress::Raw::Bzip2 has been upgraded from version 2.069 to 2.074.
+.IP \(bu 4
+Compress::Raw::Zlib has been upgraded from version 2.069 to 2.074.
+.IP \(bu 4
+Config::Perl::V has been upgraded from version 0.25 to 0.28.
+.IP \(bu 4
+CPAN has been upgraded from version 2.11 to 2.18.
+.IP \(bu 4
+CPAN::Meta has been upgraded from version 2.150005 to 2.150010.
+.IP \(bu 4
+Data::Dumper has been upgraded from version 2.160 to 2.167.
+.Sp
+The XS implementation now supports Deparse.
+.IP \(bu 4
+DB_File has been upgraded from version 1.835 to 1.840.
+.IP \(bu 4
+Devel::Peek has been upgraded from version 1.23 to 1.26.
+.IP \(bu 4
+Devel::PPPort has been upgraded from version 3.32 to 3.35.
+.IP \(bu 4
+Devel::SelfStubber has been upgraded from version 1.05 to 1.06.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+diagnostics has been upgraded from version 1.34 to 1.36.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+Digest has been upgraded from version 1.17 to 1.17_01.
+.IP \(bu 4
+Digest::MD5 has been upgraded from version 2.54 to 2.55.
+.IP \(bu 4
+Digest::SHA has been upgraded from version 5.95 to 5.96.
+.IP \(bu 4
+DynaLoader has been upgraded from version 1.38 to 1.42.
+.IP \(bu 4
+Encode has been upgraded from version 2.80 to 2.88.
+.IP \(bu 4
+encoding has been upgraded from version 2.17 to 2.19.
+.Sp
+This module's default mode is no longer supported. It now
+dies when imported, unless the \f(CW\*(C`Filter\*(C'\fR option is being used.
+.IP \(bu 4
+encoding::warnings has been upgraded from version 0.12 to 0.13.
+.Sp
+This module is no longer supported. It emits a warning to
+that effect and then does nothing.
+.IP \(bu 4
+Errno has been upgraded from version 1.25 to 1.28.
+.Sp
+It now documents that using \f(CW\*(C`%!\*(C'\fR automatically loads Errno for you.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+ExtUtils::Embed has been upgraded from version 1.33 to 1.34.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+ExtUtils::MakeMaker has been upgraded from version 7.10_01 to 7.24.
+.IP \(bu 4
+ExtUtils::Miniperl has been upgraded from version 1.05 to 1.06.
+.IP \(bu 4
+ExtUtils::ParseXS has been upgraded from version 3.31 to 3.34.
+.IP \(bu 4
+ExtUtils::Typemaps has been upgraded from version 3.31 to 3.34.
+.IP \(bu 4
+feature has been upgraded from version 1.42 to 1.47.
+.IP \(bu 4
+File::Copy has been upgraded from version 2.31 to 2.32.
+.IP \(bu 4
+File::Fetch has been upgraded from version 0.48 to 0.52.
+.IP \(bu 4
+File::Glob has been upgraded from version 1.26 to 1.28.
+.Sp
+It now Issues a deprecation message for \f(CWFile::Glob::glob()\fR.
+.IP \(bu 4
+File::Spec has been upgraded from version 3.63 to 3.67.
+.IP \(bu 4
+FileHandle has been upgraded from version 2.02 to 2.03.
+.IP \(bu 4
+Filter::Simple has been upgraded from version 0.92 to 0.93.
+.Sp
+It no longer treats \f(CW\*(C`no MyFilter\*(C'\fR immediately following \f(CW\*(C`use MyFilter\*(C'\fR as
+end-of-file.
+[GH #11853] <https://github.com/Perl/perl5/issues/11853>
+.IP \(bu 4
+Getopt::Long has been upgraded from version 2.48 to 2.49.
+.IP \(bu 4
+Getopt::Std has been upgraded from version 1.11 to 1.12.
+.IP \(bu 4
+Hash::Util has been upgraded from version 0.19 to 0.22.
+.IP \(bu 4
+HTTP::Tiny has been upgraded from version 0.056 to 0.070.
+.Sp
+Internal 599\-series errors now include the redirect history.
+.IP \(bu 4
+I18N::LangTags has been upgraded from version 0.40 to 0.42.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+IO has been upgraded from version 1.36 to 1.38.
+.IP \(bu 4
+IO::Socket::IP has been upgraded from version 0.37 to 0.38.
+.IP \(bu 4
+IPC::Cmd has been upgraded from version 0.92 to 0.96.
+.IP \(bu 4
+IPC::SysV has been upgraded from version 2.06_01 to 2.07.
+.IP \(bu 4
+JSON::PP has been upgraded from version 2.27300 to 2.27400_02.
+.IP \(bu 4
+lib has been upgraded from version 0.63 to 0.64.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+List::Util has been upgraded from version 1.42_02 to 1.46_02.
+.IP \(bu 4
+Locale::Codes has been upgraded from version 3.37 to 3.42.
+.IP \(bu 4
+Locale::Maketext has been upgraded from version 1.26 to 1.28.
+.IP \(bu 4
+Locale::Maketext::Simple has been upgraded from version 0.21 to 0.21_01.
+.IP \(bu 4
+Math::BigInt has been upgraded from version 1.999715 to 1.999806.
+.IP \(bu 4
+Math::BigInt::FastCalc has been upgraded from version 0.40 to 0.5005.
+.IP \(bu 4
+Math::BigRat has been upgraded from version 0.260802 to 0.2611.
+.IP \(bu 4
+Math::Complex has been upgraded from version 1.59 to 1.5901.
+.IP \(bu 4
+Memoize has been upgraded from version 1.03 to 1.03_01.
+.IP \(bu 4
+Module::CoreList has been upgraded from version 5.20170420 to 5.20170530.
+.IP \(bu 4
+Module::Load::Conditional has been upgraded from version 0.64 to 0.68.
+.IP \(bu 4
+Module::Metadata has been upgraded from version 1.000031 to 1.000033.
+.IP \(bu 4
+mro has been upgraded from version 1.18 to 1.20.
+.IP \(bu 4
+Net::Ping has been upgraded from version 2.43 to 2.55.
+.Sp
+IPv6 addresses and \f(CW\*(C`AF_INET6\*(C'\fR sockets are now supported, along with several
+other enhancements.
+.IP \(bu 4
+NEXT has been upgraded from version 0.65 to 0.67.
+.IP \(bu 4
+Opcode has been upgraded from version 1.34 to 1.39.
+.IP \(bu 4
+open has been upgraded from version 1.10 to 1.11.
+.IP \(bu 4
+OS2::Process has been upgraded from version 1.11 to 1.12.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+overload has been upgraded from version 1.26 to 1.28.
+.Sp
+Its compilation speed has been improved slightly.
+.IP \(bu 4
+parent has been upgraded from version 0.234 to 0.236.
+.IP \(bu 4
+perl5db.pl has been upgraded from version 1.50 to 1.51.
+.Sp
+It now ignores \fI/dev/tty\fR on non-Unix systems.
+[GH #12244] <https://github.com/Perl/perl5/issues/12244>
+.IP \(bu 4
+Perl::OSType has been upgraded from version 1.009 to 1.010.
+.IP \(bu 4
+perlfaq has been upgraded from version 5.021010 to 5.021011.
+.IP \(bu 4
+PerlIO has been upgraded from version 1.09 to 1.10.
+.IP \(bu 4
+PerlIO::encoding has been upgraded from version 0.24 to 0.25.
+.IP \(bu 4
+PerlIO::scalar has been upgraded from version 0.24 to 0.26.
+.IP \(bu 4
+Pod::Checker has been upgraded from version 1.60 to 1.73.
+.IP \(bu 4
+Pod::Functions has been upgraded from version 1.10 to 1.11.
+.IP \(bu 4
+Pod::Html has been upgraded from version 1.22 to 1.2202.
+.IP \(bu 4
+Pod::Perldoc has been upgraded from version 3.25_02 to 3.28.
+.IP \(bu 4
+Pod::Simple has been upgraded from version 3.32 to 3.35.
+.IP \(bu 4
+Pod::Usage has been upgraded from version 1.68 to 1.69.
+.IP \(bu 4
+POSIX has been upgraded from version 1.65 to 1.76.
+.Sp
+This remedies several defects in making its symbols exportable.
+[GH #15260] <https://github.com/Perl/perl5/issues/15260>
+.Sp
+The \f(CWPOSIX::tmpnam()\fR interface has been removed,
+see "\fBPOSIX::tmpnam()\fR has been removed".
+.Sp
+The following deprecated functions have been removed:
+.Sp
+.Vb 10
+\& POSIX::isalnum
+\& POSIX::isalpha
+\& POSIX::iscntrl
+\& POSIX::isdigit
+\& POSIX::isgraph
+\& POSIX::islower
+\& POSIX::isprint
+\& POSIX::ispunct
+\& POSIX::isspace
+\& POSIX::isupper
+\& POSIX::isxdigit
+\& POSIX::tolower
+\& POSIX::toupper
+.Ve
+.Sp
+Trying to import POSIX subs that have no real implementations
+(like \f(CWPOSIX::atend()\fR) now fails at import time, instead of
+waiting until runtime.
+.IP \(bu 4
+re has been upgraded from version 0.32 to 0.34
+.Sp
+This adds support for the new \f(CW\*(C`/xx\*(C'\fR
+regular expression pattern modifier, and a change to the \f(CWuse\ re\ \*(Aqstrict\*(Aq\fR experimental feature. When \f(CWre\ \*(Aqstrict\*(Aq\fR is enabled, a warning now will be generated for all
+unescaped uses of the two characters \f(CW"}"\fR and \f(CW"]"\fR in regular
+expression patterns (outside bracketed character classes) that are taken
+literally. This brings them more in line with the \f(CW")"\fR character which
+is always a metacharacter unless escaped. Being a metacharacter only
+sometimes, depending on an action at a distance, can lead to silently
+having the pattern mean something quite different than was intended,
+which the \f(CW\*(C`re\ \*(Aqstrict\*(Aq\*(C'\fR mode is intended to minimize.
+.IP \(bu 4
+Safe has been upgraded from version 2.39 to 2.40.
+.IP \(bu 4
+Scalar::Util has been upgraded from version 1.42_02 to 1.46_02.
+.IP \(bu 4
+Storable has been upgraded from version 2.56 to 2.62.
+.Sp
+Fixes
+[GH #15714] <https://github.com/Perl/perl5/issues/15714>.
+.IP \(bu 4
+Symbol has been upgraded from version 1.07 to 1.08.
+.IP \(bu 4
+Sys::Syslog has been upgraded from version 0.33 to 0.35.
+.IP \(bu 4
+Term::ANSIColor has been upgraded from version 4.04 to 4.06.
+.IP \(bu 4
+Term::ReadLine has been upgraded from version 1.15 to 1.16.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+Test has been upgraded from version 1.28 to 1.30.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+Test::Harness has been upgraded from version 3.36 to 3.38.
+.IP \(bu 4
+Test::Simple has been upgraded from version 1.001014 to 1.302073.
+.IP \(bu 4
+Thread::Queue has been upgraded from version 3.09 to 3.12.
+.IP \(bu 4
+Thread::Semaphore has been upgraded from 2.12 to 2.13.
+.Sp
+Added the \f(CW\*(C`down_timed\*(C'\fR method.
+.IP \(bu 4
+threads has been upgraded from version 2.07 to 2.15.
+.IP \(bu 4
+threads::shared has been upgraded from version 1.51 to 1.56.
+.IP \(bu 4
+Tie::Hash::NamedCapture has been upgraded from version 0.09 to 0.10.
+.IP \(bu 4
+Time::HiRes has been upgraded from version 1.9733 to 1.9741.
+.Sp
+It now builds on systems with C++11 compilers (such as G++ 6 and Clang++
+3.9).
+.Sp
+Now uses \f(CW\*(C`clockid_t\*(C'\fR.
+.IP \(bu 4
+Time::Local has been upgraded from version 1.2300 to 1.25.
+.IP \(bu 4
+Unicode::Collate has been upgraded from version 1.14 to 1.19.
+.IP \(bu 4
+Unicode::UCD has been upgraded from version 0.64 to 0.68.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+version has been upgraded from version 0.9916 to 0.9917.
+.IP \(bu 4
+VMS::DCLsym has been upgraded from version 1.06 to 1.08.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.IP \(bu 4
+warnings has been upgraded from version 1.36 to 1.37.
+.IP \(bu 4
+XS::Typemap has been upgraded from version 0.14 to 0.15.
+.IP \(bu 4
+XSLoader has been upgraded from version 0.21 to 0.27.
+.Sp
+Fixed a security hole in which binary files could be loaded from a path
+outside of \f(CW@INC\fR.
+.Sp
+It now uses 3\-arg \f(CWopen()\fR instead of 2\-arg \f(CWopen()\fR.
+[GH #15721] <https://github.com/Perl/perl5/issues/15721>
+.SH Documentation
+.IX Header "Documentation"
+.SS "New Documentation"
+.IX Subsection "New Documentation"
+\fIperldeprecation\fR
+.IX Subsection "perldeprecation"
+.PP
+This file documents all upcoming deprecations, and some of the deprecations
+which already have been removed. The purpose of this documentation is
+two-fold: document what will disappear, and by which version, and serve
+as a guide for people dealing with code which has features that no longer
+work after an upgrade of their perl.
+.SS "Changes to Existing Documentation"
+.IX Subsection "Changes to Existing Documentation"
+We have attempted to update the documentation to reflect the changes
+listed in this document. If you find any we have missed, send email to
+perlbug@perl.org <mailto:perlbug@perl.org>.
+.PP
+Additionally, all references to Usenet have been removed, and the
+following selected changes have been made:
+.PP
+\fIperlfunc\fR
+.IX Subsection "perlfunc"
+.IP \(bu 4
+Removed obsolete text about \f(CWdefined()\fR
+on aggregates that should have been deleted earlier, when the feature
+was removed.
+.IP \(bu 4
+Corrected documentation of \f(CWeval()\fR,
+and \f(CWevalbytes()\fR.
+.IP \(bu 4
+Clarified documentation of \f(CWseek()\fR,
+\&\f(CWtell()\fR and \f(CWsysseek()\fR
+emphasizing that positions are in bytes and not characters.
+[GH #15438] <https://github.com/Perl/perl5/issues/15438>
+.IP \(bu 4
+Clarified documentation of \f(CWsort()\fR concerning
+the variables \f(CW$a\fR and \f(CW$b\fR.
+.IP \(bu 4
+In \f(CWsplit()\fR noted that certain pattern modifiers are
+legal, and added a caution about its use in Perls before v5.11.
+.IP \(bu 4
+Removed obsolete documentation of \f(CWstudy()\fR, noting
+that it is now a no-op.
+.IP \(bu 4
+Noted that \f(CWvec()\fR doesn't work well when the string
+contains characters whose code points are above 255.
+.PP
+\fIperlguts\fR
+.IX Subsection "perlguts"
+.IP \(bu 4
+Added advice on
+formatted printing of operands of \f(CW\*(C`Size_t\*(C'\fR and \f(CW\*(C`SSize_t\*(C'\fR
+.PP
+\fIperlhack\fR
+.IX Subsection "perlhack"
+.IP \(bu 4
+Clarify what editor tab stop rules to use, and note that we are
+migrating away from using tabs, replacing them with sequences of SPACE
+characters.
+.PP
+\fIperlhacktips\fR
+.IX Subsection "perlhacktips"
+.IP \(bu 4
+Give another reason to use \f(CW\*(C`cBOOL\*(C'\fR to cast an expression to boolean.
+.IP \(bu 4
+Note that the macros \f(CW\*(C`TRUE\*(C'\fR and \f(CW\*(C`FALSE\*(C'\fR are available to express
+boolean values.
+.PP
+\fIperlinterp\fR
+.IX Subsection "perlinterp"
+.IP \(bu 4
+perlinterp has been expanded to give a more detailed example of how to
+hunt around in the parser for how a given operator is handled.
+.PP
+\fIperllocale\fR
+.IX Subsection "perllocale"
+.IP \(bu 4
+Some locales aren't compatible with Perl. Note that these can cause
+core dumps.
+.PP
+\fIperlmod\fR
+.IX Subsection "perlmod"
+.IP \(bu 4
+Various clarifications have been added.
+.PP
+\fIperlmodlib\fR
+.IX Subsection "perlmodlib"
+.IP \(bu 4
+Updated the site mirror list.
+.PP
+\fIperlobj\fR
+.IX Subsection "perlobj"
+.IP \(bu 4
+Added a section on calling methods using their fully qualified names.
+.IP \(bu 4
+Do not discourage manual \f(CW@ISA\fR.
+.PP
+\fIperlootut\fR
+.IX Subsection "perlootut"
+.IP \(bu 4
+Mention \f(CW\*(C`Moo\*(C'\fR more.
+.PP
+\fIperlop\fR
+.IX Subsection "perlop"
+.IP \(bu 4
+Note that white space must be used for quoting operators if the
+delimiter is a word character (\fIi.e.\fR, matches \f(CW\*(C`\ew\*(C'\fR).
+.IP \(bu 4
+Clarify that in regular expression patterns delimited by single quotes,
+no variable interpolation is done.
+.PP
+\fIperlre\fR
+.IX Subsection "perlre"
+.IP \(bu 4
+The first part was extensively rewritten to incorporate various basic
+points, that in earlier versions were mentioned in sort of an appendix
+on Version 8 regular expressions.
+.IP \(bu 4
+Note that it is common to have the \f(CW\*(C`/x\*(C'\fR modifier and forget that this
+means that \f(CW"#"\fR has to be escaped.
+.PP
+\fIperlretut\fR
+.IX Subsection "perlretut"
+.IP \(bu 4
+Add introductory material.
+.IP \(bu 4
+Note that a metacharacter occurring in a context where it can't mean
+that, silently loses its meta-ness and matches literally.
+\&\f(CW\*(C`use re \*(Aqstrict\*(Aq\*(C'\fR can catch some of these.
+.PP
+\fIperlunicode\fR
+.IX Subsection "perlunicode"
+.IP \(bu 4
+Corrected the text about Unicode BYTE ORDER MARK handling.
+.IP \(bu 4
+Updated the text to correspond with changes in Unicode UTS#18, concerning
+regular expressions, and Perl compatibility with what it says.
+.PP
+\fIperlvar\fR
+.IX Subsection "perlvar"
+.IP \(bu 4
+Document \f(CW@ISA\fR. It was documented in other places, but not in perlvar.
+.SH Diagnostics
+.IX Header "Diagnostics"
+.SS "New Diagnostics"
+.IX Subsection "New Diagnostics"
+\fINew Errors\fR
+.IX Subsection "New Errors"
+.IP \(bu 4
+A signature parameter must start with \f(CW\*(Aq$\*(Aq\fR, \f(CW\*(Aq@\*(Aq\fR or \f(CW\*(Aq%\*(Aq\fR
+.IP \(bu 4
+Bareword in require contains "%s"
+.IP \(bu 4
+Bareword in require maps to empty filename
+.IP \(bu 4
+Bareword in require maps to disallowed filename "%s"
+.IP \(bu 4
+Bareword in require must not start with a double-colon: "%s"
+.IP \(bu 4
+\&\f(CW%s:\fR command not found
+.Sp
+(A) You've accidentally run your script through \fBbash\fR or another shell
+instead of Perl. Check the \f(CW\*(C`#!\*(C'\fR line, or manually feed your script into
+Perl yourself. The \f(CW\*(C`#!\*(C'\fR line at the top of your file could look like:
+.Sp
+.Vb 1
+\& #!/usr/bin/perl
+.Ve
+.IP \(bu 4
+\&\f(CW%s:\fR command not found: \f(CW%s\fR
+.Sp
+(A) You've accidentally run your script through \fBzsh\fR or another shell
+instead of Perl. Check the \f(CW\*(C`#!\*(C'\fR line, or manually feed your script into
+Perl yourself. The \f(CW\*(C`#!\*(C'\fR line at the top of your file could look like:
+.Sp
+.Vb 1
+\& #!/usr/bin/perl
+.Ve
+.IP \(bu 4
+The experimental declared_refs feature is not enabled
+.Sp
+(F) To declare references to variables, as in \f(CW\*(C`my \e%x\*(C'\fR, you must first enable
+the feature:
+.Sp
+.Vb 2
+\& no warnings "experimental::declared_refs";
+\& use feature "declared_refs";
+.Ve
+.Sp
+See "Declaring a reference to a variable".
+.IP \(bu 4
+Illegal character following sigil in a subroutine signature
+.IP \(bu 4
+Indentation on line \f(CW%d\fR of here-doc doesn't match delimiter
+.IP \(bu 4
+Infinite recursion via empty pattern.
+.Sp
+Using the empty pattern (which re-executes the last successfully-matched
+pattern) inside a code block in another regex, as in \f(CW\*(C`/(?{ s!!new! })/\*(C'\fR, has
+always previously yielded a segfault. It now produces this error.
+.IP \(bu 4
+Malformed UTF\-8 string in "%s"
+.IP \(bu 4
+Multiple slurpy parameters not allowed
+.IP \(bu 4
+\&\f(CW\*(Aq#\*(Aq\fR not allowed immediately following a sigil in a subroutine signature
+.IP \(bu 4
+panic: unknown OA_*: \f(CW%x\fR
+.IP \(bu 4
+Unescaped left brace in regex is illegal here
+.Sp
+Unescaped left braces are now illegal in some contexts in regular expression
+patterns. In other contexts, they are still just deprecated; they will
+be illegal in Perl 5.30.
+.IP \(bu 4
+Version control conflict marker
+.Sp
+(F) The parser found a line starting with \f(CW\*(C`<<<<<<<\*(C'\fR,
+\&\f(CW\*(C`>>>>>>>\*(C'\fR, or \f(CW\*(C`=======\*(C'\fR. These may be left by a
+version control system to mark conflicts after a failed merge operation.
+.PP
+\fINew Warnings\fR
+.IX Subsection "New Warnings"
+.IP \(bu 4
+Can't determine class of operator \f(CW%s\fR, assuming \f(CW\*(C`BASEOP\*(C'\fR
+.IP \(bu 4
+Declaring references is experimental
+.Sp
+(S experimental::declared_refs) This warning is emitted if you use a reference
+constructor on the right-hand side of \f(CWmy()\fR, \f(CWstate()\fR, \f(CWour()\fR, or
+\&\f(CWlocal()\fR. Simply suppress the warning if you want to use the feature, but
+know that in doing so you are taking the risk of using an experimental feature
+which may change or be removed in a future Perl version:
+.Sp
+.Vb 3
+\& no warnings "experimental::declared_refs";
+\& use feature "declared_refs";
+\& $fooref = my \e$foo;
+.Ve
+.Sp
+See "Declaring a reference to a variable".
+.IP \(bu 4
+do "%s" failed, '.' is no longer in \f(CW@INC\fR
+.Sp
+Since \f(CW"."\fR is now removed from \f(CW@INC\fR by default, \f(CW\*(C`do\*(C'\fR will now trigger a warning recommending to fix the \f(CW\*(C`do\*(C'\fR statement.
+.IP \(bu 4
+\&\f(CWFile::Glob::glob()\fR will disappear in perl 5.30. Use \f(CWFile::Glob::bsd_glob()\fR instead.
+.IP \(bu 4
+Unescaped literal '%c' in regex; marked by <\-\- HERE in m/%s/
+.IP \(bu 4
+Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30
+.Sp
+See "Deprecations"
+.SS "Changes to Existing Diagnostics"
+.IX Subsection "Changes to Existing Diagnostics"
+.IP \(bu 4
+When a \f(CW\*(C`require\*(C'\fR fails, we now do not provide \f(CW@INC\fR when the \f(CW\*(C`require\*(C'\fR
+is for a file instead of a module.
+.IP \(bu 4
+When \f(CW@INC\fR is not scanned for a \f(CW\*(C`require\*(C'\fR call, we no longer display
+\&\f(CW@INC\fR to avoid confusion.
+.IP \(bu 4
+Attribute "locked" is deprecated, and will disappear in Perl 5.28
+.Sp
+This existing warning has had the \fIand will disappear\fR text added in this
+release.
+.IP \(bu 4
+Attribute "unique" is deprecated, and will disappear in Perl 5.28
+.Sp
+This existing warning has had the \fIand will disappear\fR text added in this
+release.
+.IP \(bu 4
+Calling POSIX::%s() is deprecated
+.Sp
+This warning has been removed, as the deprecated functions have been
+removed from POSIX.
+.IP \(bu 4
+Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32
+.Sp
+This existing warning has had the \fIthis will not be allowed\fR text added
+in this release.
+.IP \(bu 4
+Deprecated use of \f(CWmy()\fR in false conditional. This will be a fatal error in Perl 5.30
+.Sp
+This existing warning has had the \fIthis will be a fatal error\fR text added
+in this release.
+.IP \(bu 4
+\&\f(CWdump()\fR better written as \f(CWCORE::dump()\fR. \f(CWdump()\fR will no longer be available in Perl 5.30
+.Sp
+This existing warning has had the \fIno longer be available\fR text added in
+this release.
+.IP \(bu 4
+Experimental \f(CW%s\fR on scalar is now forbidden
+.Sp
+This message is now followed by more helpful text.
+[GH #15291] <https://github.com/Perl/perl5/issues/15291>
+.IP \(bu 4
+Experimental "%s" subs not enabled
+.Sp
+This warning was been removed, as lexical subs are no longer experimental.
+.IP \(bu 4
+Having more than one /%c regexp modifier is deprecated
+.Sp
+This deprecation warning has been removed, since \f(CW\*(C`/xx\*(C'\fR now has a new
+meaning.
+.IP \(bu 4
+%s() is deprecated on \f(CW\*(C`:utf8\*(C'\fR handles. This will be a fatal error in Perl 5.30
+\&.
+.Sp
+where "%s" is one of \f(CW\*(C`sysread\*(C'\fR, \f(CW\*(C`recv\*(C'\fR, \f(CW\*(C`syswrite\*(C'\fR, or \f(CW\*(C`send\*(C'\fR.
+.Sp
+This existing warning has had the \fIthis will be a fatal error\fR text added
+in this release.
+.Sp
+This warning is now enabled by default, as all \f(CW\*(C`deprecated\*(C'\fR category
+warnings should be.
+.IP \(bu 4
+\&\f(CW$*\fR is no longer supported. Its use will be fatal in Perl 5.30
+.Sp
+This existing warning has had the \fIits use will be fatal\fR text added in
+this release.
+.IP \(bu 4
+\&\f(CW$#\fR is no longer supported. Its use will be fatal in Perl 5.30
+.Sp
+This existing warning has had the \fIits use will be fatal\fR text added in
+this release.
+.IP \(bu 4
+Malformed UTF\-8 character%s
+.Sp
+Details as to the exact problem have been added at the end of this
+message
+.IP \(bu 4
+Missing or undefined argument to \f(CW%s\fR
+.Sp
+This warning used to warn about \f(CW\*(C`require\*(C'\fR, even if it was actually \f(CW\*(C`do\*(C'\fR
+which being executed. It now gets the operation name right.
+.IP \(bu 4
+NO-BREAK SPACE in a charnames alias definition is deprecated
+.Sp
+This warning has been removed as the behavior is now an error.
+.IP \(bu 4
+Odd name/value argument for subroutine '%s'
+.Sp
+This warning now includes the name of the offending subroutine.
+.IP \(bu 4
+Opening dirhandle \f(CW%s\fR also as a file. This will be a fatal error in Perl 5.28
+.Sp
+This existing warning has had the \fIthis will be a fatal error\fR text added
+in this release.
+.IP \(bu 4
+Opening filehandle \f(CW%s\fR also as a directory. This will be a fatal error in Perl 5.28
+.Sp
+This existing warning has had the \fIthis will be a fatal error\fR text added
+in this release.
+.IP \(bu 4
+panic: ck_split, type=%u
+.Sp
+panic: pp_split, pm=%p, s=%p
+.Sp
+These panic errors have been removed.
+.IP \(bu 4
+Passing malformed UTF\-8 to "%s" is deprecated
+.Sp
+This warning has been changed to the fatal
+Malformed UTF\-8 string in "%s"
+.IP \(bu 4
+Setting \f(CW$/\fR to a reference to \f(CW%s\fR as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28
+.Sp
+This existing warning has had the \fIthis will be fatal\fR text added in
+this release.
+.IP \(bu 4
+\&\f(CW\*(C`${^ENCODING}\*(C'\fR is no longer supported. Its use will be fatal in Perl 5.28
+.Sp
+This warning used to be: "Setting \f(CW\*(C`${^ENCODING}\*(C'\fR is deprecated".
+.Sp
+The special action of the variable \f(CW\*(C`${^ENCODING}\*(C'\fR was formerly used to
+implement the \f(CW\*(C`encoding\*(C'\fR pragma. As of Perl 5.26, rather than being
+deprecated, assigning to this variable now has no effect except to issue
+the warning.
+.IP \(bu 4
+Too few arguments for subroutine '%s'
+.Sp
+This warning now includes the name of the offending subroutine.
+.IP \(bu 4
+Too many arguments for subroutine '%s'
+.Sp
+This warning now includes the name of the offending subroutine.
+.IP \(bu 4
+Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <\-\-\ HERE in m/%s/
+.Sp
+This existing warning has had the \fIhere (and will be fatal...)\fR text
+added in this release.
+.IP \(bu 4
+Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28
+.Sp
+This existing warning has had the \fIits use will be fatal\fR text added in
+this release.
+.IP \(bu 4
+Use of bare << to mean <<"" is deprecated. Its use will be fatal in Perl 5.28
+.Sp
+This existing warning has had the \fIits use will be fatal\fR text added in
+this release.
+.IP \(bu 4
+Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28
+.Sp
+This existing warning has had the \fIthis will be fatal\fR text added in
+this release.
+.IP \(bu 4
+Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28
+.Sp
+This existing warning has had the \fIits use will be fatal\fR text added in
+this release.
+.IP \(bu 4
+Use of inherited \f(CW\*(C`AUTOLOAD\*(C'\fR for non-method %s() is deprecated. This will be fatal in Perl 5.28
+.Sp
+This existing warning has had the \fIthis will be fatal\fR text added in
+this release.
+.IP \(bu 4
+Use of strings with code points over 0xFF as arguments to \f(CW%s\fR operator is deprecated. This will be a fatal error in Perl 5.28
+.Sp
+This existing warning has had the \fIthis will be a fatal error\fR text added in
+this release.
+.SH "Utility Changes"
+.IX Header "Utility Changes"
+.SS "\fIc2ph\fP and \fIpstruct\fP"
+.IX Subsection "c2ph and pstruct"
+.IP \(bu 4
+These old utilities have long since superceded by h2xs, and are
+now gone from the distribution.
+.SS \fIPorting/pod_lib.pl\fP
+.IX Subsection "Porting/pod_lib.pl"
+.IP \(bu 4
+Removed spurious executable bit.
+.IP \(bu 4
+Account for the possibility of DOS file endings.
+.SS \fIPorting/sync\-with\-cpan\fP
+.IX Subsection "Porting/sync-with-cpan"
+.IP \(bu 4
+Many improvements.
+.SS \fIperf/benchmarks\fP
+.IX Subsection "perf/benchmarks"
+.IP \(bu 4
+Tidy file, rename some symbols.
+.SS \fIPorting/checkAUTHORS.pl\fP
+.IX Subsection "Porting/checkAUTHORS.pl"
+.IP \(bu 4
+Replace obscure character range with \f(CW\*(C`\ew\*(C'\fR.
+.SS \fIt/porting/regen.t\fP
+.IX Subsection "t/porting/regen.t"
+.IP \(bu 4
+Try to be more helpful when tests fail.
+.SS \fIutils/h2xs.PL\fP
+.IX Subsection "utils/h2xs.PL"
+.IP \(bu 4
+Avoid infinite loop for enums.
+.SS perlbug
+.IX Subsection "perlbug"
+.IP \(bu 4
+Long lines in the message body are now wrapped at 900 characters, to stay
+well within the 1000\-character limit imposed by SMTP mail transfer agents.
+This is particularly likely to be important for the list of arguments to
+\&\fIConfigure\fR, which can readily exceed the limit if, for example, it names
+several non-default installation paths. This change also adds the first unit
+tests for perlbug.
+[perl #128020] <https://rt.perl.org/Public/Bug/Display.html?id=128020>
+.SH "Configuration and Compilation"
+.IX Header "Configuration and Compilation"
+.IP \(bu 4
+\&\f(CW\*(C`\-Ddefault_inc_excludes_dot\*(C'\fR has added, and enabled by default.
+.IP \(bu 4
+The \f(CW\*(C`dtrace\*(C'\fR build process has further changes
+[GH #15718] <https://github.com/Perl/perl5/issues/15718>:
+.RS 4
+.IP \(bu 4
+If the \f(CW\*(C`\-xnolibs\*(C'\fR is available, use that so a \fIdtrace\fR perl can be
+built within a FreeBSD jail.
+.IP \(bu 4
+On systems that build a \fIdtrace\fR object file (FreeBSD, Solaris, and
+SystemTap's dtrace emulation), copy the input objects to a separate
+directory and process them there, and use those objects in the link,
+since \f(CW\*(C`dtrace \-G\*(C'\fR also modifies these objects.
+.IP \(bu 4
+Add \fIlibelf\fR to the build on FreeBSD 10.x, since \fIdtrace\fR adds
+references to \fIlibelf\fR symbols.
+.IP \(bu 4
+Generate a dummy \fIdtrace_main.o\fR if \f(CW\*(C`dtrace \-G\*(C'\fR fails to build it. A
+default build on Solaris generates probes from the unused inline
+functions, while they don't on FreeBSD, which causes \f(CW\*(C`dtrace \-G\*(C'\fR to
+fail.
+.RE
+.RS 4
+.RE
+.IP \(bu 4
+You can now disable perl's use of the \f(CW\*(C`PERL_HASH_SEED\*(C'\fR and
+\&\f(CW\*(C`PERL_PERTURB_KEYS\*(C'\fR environment variables by configuring perl with
+\&\f(CW\*(C`\-Accflags=NO_PERL_HASH_ENV\*(C'\fR.
+.IP \(bu 4
+You can now disable perl's use of the \f(CW\*(C`PERL_HASH_SEED_DEBUG\*(C'\fR environment
+variable by configuring perl with
+\&\f(CW\*(C`\-Accflags=\-DNO_PERL_HASH_SEED_DEBUG\*(C'\fR.
+.IP \(bu 4
+\&\fIConfigure\fR now zeroes out the alignment bytes when calculating the bytes
+for 80\-bit \f(CW\*(C`NaN\*(C'\fR and \f(CW\*(C`Inf\*(C'\fR to make builds more reproducible.
+[GH #15725] <https://github.com/Perl/perl5/issues/15725>
+.IP \(bu 4
+Since v5.18, for testing purposes we have included support for
+building perl with a variety of non-standard, and non-recommended
+hash functions. Since we do not recommend the use of these functions,
+we have removed them and their corresponding build options. Specifically
+this includes the following build options:
+.Sp
+.Vb 8
+\& PERL_HASH_FUNC_SDBM
+\& PERL_HASH_FUNC_DJB2
+\& PERL_HASH_FUNC_SUPERFAST
+\& PERL_HASH_FUNC_MURMUR3
+\& PERL_HASH_FUNC_ONE_AT_A_TIME
+\& PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
+\& PERL_HASH_FUNC_MURMUR_HASH_64A
+\& PERL_HASH_FUNC_MURMUR_HASH_64B
+.Ve
+.IP \(bu 4
+Remove "Warning: perl appears in your path"
+.Sp
+This install warning is more or less obsolete, since most platforms already
+\&\fBwill\fR have a \fI/usr/bin/perl\fR or similar provided by the OS.
+.IP \(bu 4
+Reduce verbosity of \f(CW\*(C`make install.man\*(C'\fR
+.Sp
+Previously, two progress messages were emitted for each manpage: one by
+installman itself, and one by the function in \fIinstall_lib.pl\fR that it calls to
+actually install the file. Disabling the second of those in each case saves
+over 750 lines of unhelpful output.
+.IP \(bu 4
+Cleanup for \f(CW\*(C`clang \-Weverything\*(C'\fR support.
+[GH #15683] <https://github.com/Perl/perl5/issues/15683>
+.IP \(bu 4
+\&\fIConfigure\fR: signbit scan was assuming too much, stop assuming negative 0.
+.IP \(bu 4
+Various compiler warnings have been silenced.
+.IP \(bu 4
+Several smaller changes have been made to remove impediments to compiling
+under C++11.
+.IP \(bu 4
+Builds using \f(CW\*(C`USE_PAD_RESET\*(C'\fR now work again; this configuration had
+bit-rotted.
+.IP \(bu 4
+A probe for \f(CW\*(C`gai_strerror\*(C'\fR was added to \fIConfigure\fR that checks if
+the \f(CWgai_strerror()\fR routine is available and can be used to
+translate error codes returned by \f(CWgetaddrinfo()\fR into human
+readable strings.
+.IP \(bu 4
+\&\fIConfigure\fR now aborts if both \f(CW\*(C`\-Duselongdouble\*(C'\fR and \f(CW\*(C`\-Dusequadmath\*(C'\fR are
+requested.
+[GH #14944] <https://github.com/Perl/perl5/issues/14944>
+.IP \(bu 4
+Fixed a bug in which \fIConfigure\fR could append \f(CW\*(C`\-quadmath\*(C'\fR to the
+archname even if it was already present.
+[GH #15423] <https://github.com/Perl/perl5/issues/15423>
+.IP \(bu 4
+Clang builds with \f(CW\*(C`\-DPERL_GLOBAL_STRUCT\*(C'\fR or
+\&\f(CW\*(C`\-DPERL_GLOBAL_STRUCT_PRIVATE\*(C'\fR have
+been fixed (by disabling Thread Safety Analysis for these configurations).
+.IP \(bu 4
+\&\fImake_ext.pl\fR no longer updates a module's \fIpm_to_blib\fR file when no
+files require updates. This could cause dependencies, \fIperlmain.c\fR
+in particular, to be rebuilt unnecessarily.
+[GH #15060] <https://github.com/Perl/perl5/issues/15060>
+.IP \(bu 4
+The output of \f(CW\*(C`perl \-V\*(C'\fR has been reformatted so that each configuration
+and compile-time option is now listed one per line, to improve
+readability.
+.IP \(bu 4
+\&\fIConfigure\fR now builds \f(CW\*(C`miniperl\*(C'\fR and \f(CW\*(C`generate_uudmap\*(C'\fR if you
+invoke it with \f(CW\*(C`\-Dusecrosscompiler\*(C'\fR but not \f(CW\*(C`\-Dtargethost=somehost\*(C'\fR.
+This means you can supply your target platform \f(CW\*(C`config.sh\*(C'\fR, generate
+the headers and proceed to build your cross-target perl.
+[GH #15126] <https://github.com/Perl/perl5/issues/15126>
+.IP \(bu 4
+Perl built with \f(CW\*(C`\-Accflags=\-DPERL_TRACE_OPS\*(C'\fR now only dumps the operator
+counts when the environment variable \f(CW\*(C`PERL_TRACE_OPS\*(C'\fR is set to a
+non-zero integer. This allows \f(CW\*(C`make test\*(C'\fR to pass on such a build.
+.IP \(bu 4
+When building with GCC 6 and link-time optimization (the \f(CW\*(C`\-flto\*(C'\fR option to
+\&\f(CW\*(C`gcc\*(C'\fR), \fIConfigure\fR was treating all probed symbols as present on the
+system, regardless of whether they actually exist. This has been fixed.
+[GH #15322] <https://github.com/Perl/perl5/issues/15322>
+.IP \(bu 4
+The \fIt/test.pl\fR library is used for internal testing of Perl itself, and
+also copied by several CPAN modules. Some of those modules must work on
+older versions of Perl, so \fIt/test.pl\fR must in turn avoid newer Perl
+features. Compatibility with Perl 5.8 was inadvertently removed some time
+ago; it has now been restored.
+[GH #15302] <https://github.com/Perl/perl5/issues/15302>
+.IP \(bu 4
+The build process no longer emits an extra blank line before building each
+"simple" extension (those with only \fI*.pm\fR and \fI*.pod\fR files).
+.SH Testing
+.IX Header "Testing"
+Tests were added and changed to reflect the other additions and changes
+in this release. Furthermore, these substantive changes were made:
+.IP \(bu 4
+A new test script, \fIcomp/parser_run.t\fR, has been added that is like
+\&\fIcomp/parser.t\fR but with \fItest.pl\fR included so that \f(CWrunperl()\fR and the
+like are available for use.
+.IP \(bu 4
+Tests for locales were erroneously using locales incompatible with Perl.
+.IP \(bu 4
+Some parts of the test suite that try to exhaustively test edge cases in the
+regex implementation have been restricted to running for a maximum of five
+minutes. On slow systems they could otherwise take several hours, without
+significantly improving our understanding of the correctness of the code
+under test.
+.IP \(bu 4
+A new internal facility allows analysing the time taken by the individual
+tests in Perl's own test suite; see \fIPorting/harness\-timer\-report.pl\fR.
+.IP \(bu 4
+\&\fIt/re/regexp_nonull.t\fR has been added to test that the regular expression
+engine can handle scalars that do not have a null byte just past the end of
+the string.
+.IP \(bu 4
+A new test script, \fIt/op/decl\-refs.t\fR, has been added to test the new feature
+"Declaring a reference to a variable".
+.IP \(bu 4
+A new test script, \fIt/re/keep_tabs.t\fR has been added to contain tests
+where \f(CW\*(C`\et\*(C'\fR characters should not be expanded into spaces.
+.IP \(bu 4
+A new test script, \fIt/re/anyof.t\fR, has been added to test that the ANYOF nodes
+generated by bracketed character classes are as expected.
+.IP \(bu 4
+There is now more extensive testing of the Unicode-related API macros
+and functions.
+.IP \(bu 4
+Several of the longer running API test files have been split into
+multiple test files so that they can be run in parallel.
+.IP \(bu 4
+\&\fIt/harness\fR now tries really hard not to run tests which are located
+outside of the Perl source tree.
+[GH #14578] <https://github.com/Perl/perl5/issues/14578>
+.IP \(bu 4
+Prevent debugger tests (\fIlib/perl5db.t\fR) from failing due to the contents
+of \f(CW$ENV{PERLDB_OPTS}\fR.
+[GH #15782] <https://github.com/Perl/perl5/issues/15782>
+.SH "Platform Support"
+.IX Header "Platform Support"
+.SS "New Platforms"
+.IX Subsection "New Platforms"
+.IP NetBSD/VAX 4
+.IX Item "NetBSD/VAX"
+Perl now compiles under NetBSD on VAX machines. However, it's not
+possible for that platform to implement floating-point infinities and
+NaNs compatible with most modern systems, which implement the IEEE\-754
+floating point standard. The hexadecimal floating point (\f(CW\*(C`0x...p[+\-]n\*(C'\fR
+literals, \f(CW\*(C`printf %a\*(C'\fR) is not implemented, either.
+The \f(CW\*(C`make test\*(C'\fR passes 98% of tests.
+.RS 4
+.IP \(bu 4
+Test fixes and minor updates.
+.IP \(bu 4
+Account for lack of \f(CW\*(C`inf\*(C'\fR, \f(CW\*(C`nan\*(C'\fR, and \f(CW\-0.0\fR support.
+.RE
+.RS 4
+.RE
+.SS "Platform-Specific Notes"
+.IX Subsection "Platform-Specific Notes"
+.IP Darwin 4
+.IX Item "Darwin"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Don't treat \f(CW\*(C`\-Dprefix=/usr\*(C'\fR as special: instead require an extra option
+\&\f(CW\*(C`\-Ddarwin_distribution\*(C'\fR to produce the same results.
+.IP \(bu 4
+OS X El Capitan doesn't implement the \f(CWclock_gettime()\fR or
+\&\f(CWclock_getres()\fR APIs; emulate them as necessary.
+.IP \(bu 4
+Deprecated \f(CWsyscall(2)\fR on macOS 10.12.
+.RE
+.RS 4
+.RE
+.IP EBCDIC 4
+.IX Item "EBCDIC"
+Several tests have been updated to work (or be skipped) on EBCDIC platforms.
+.IP HP-UX 4
+.IX Item "HP-UX"
+The Net::Ping UDP test is now skipped on HP-UX.
+.IP Hurd 4
+.IX Item "Hurd"
+The hints for Hurd have been improved, enabling malloc wrap and reporting the
+GNU libc used (previously it was an empty string when reported).
+.IP VAX 4
+.IX Item "VAX"
+VAX floating point formats are now supported on NetBSD.
+.IP VMS 4
+.IX Item "VMS"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+The path separator for the \f(CW\*(C`PERL5LIB\*(C'\fR and \f(CW\*(C`PERLLIB\*(C'\fR environment entries is
+now a colon (\f(CW":"\fR) when running under a Unix shell. There is no change when
+running under DCL (it's still \f(CW"|"\fR).
+.IP \(bu 4
+\&\fIconfigure.com\fR now recognizes the VSI-branded C compiler and no longer
+recognizes the "DEC"\-branded C compiler (as there hasn't been such a thing for
+15 or more years).
+.RE
+.RS 4
+.RE
+.IP Windows 4
+.IX Item "Windows"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Support for compiling perl on Windows using Microsoft Visual Studio 2015
+(containing Visual C++ 14.0) has been added.
+.Sp
+This version of VC++ includes a completely rewritten C run-time library, some
+of the changes in which mean that work done to resolve a socket
+\&\f(CWclose()\fR bug in
+perl #120091 and perl #118059 is not workable in its current state with this
+version of VC++. Therefore, we have effectively reverted that bug fix for
+VS2015 onwards on the basis that being able to build with VS2015 onwards is
+more important than keeping the bug fix. We may revisit this in the future to
+attempt to fix the bug again in a way that is compatible with VS2015.
+.Sp
+These changes do not affect compilation with GCC or with Visual Studio versions
+up to and including VS2013, \fIi.e.\fR, the bug fix is retained (unchanged) for those
+compilers.
+.Sp
+Note that you may experience compatibility problems if you mix a perl built
+with GCC or VS <= VS2013 with XS modules built with VS2015, or if you mix a
+perl built with VS2015 with XS modules built with GCC or VS <= VS2013.
+Some incompatibility may arise because of the bug fix that has been reverted
+for VS2015 builds of perl, but there may well be incompatibility anyway because
+of the rewritten CRT in VS2015 (\fIe.g.\fR, see discussion at
+<http://stackoverflow.com/questions/30412951>).
+.IP \(bu 4
+It now automatically detects GCC versus Visual C and sets the VC version
+number on Win32.
+.RE
+.RS 4
+.RE
+.IP Linux 4
+.IX Item "Linux"
+Drop support for Linux \fIa.out\fR executable format. Linux has used ELF for
+over twenty years.
+.IP "OpenBSD 6" 4
+.IX Item "OpenBSD 6"
+OpenBSD 6 still does not support returning \f(CW\*(C`pid\*(C'\fR, \f(CW\*(C`gid\*(C'\fR, or \f(CW\*(C`uid\*(C'\fR with
+\&\f(CW\*(C`SA_SIGINFO\*(C'\fR. Make sure to account for it.
+.IP FreeBSD 4
+.IX Item "FreeBSD"
+\&\fIt/uni/overload.t\fR: Skip hanging test on FreeBSD.
+.IP "DragonFly BSD" 4
+.IX Item "DragonFly BSD"
+DragonFly BSD now has support for \f(CWsetproctitle()\fR.
+[GH #15703] <https://github.com/Perl/perl5/issues/15703>.
+.SH "Internal Changes"
+.IX Header "Internal Changes"
+.IP \(bu 4
+A new API function \f(CWsv_setpv_bufsize()\fR
+allows simultaneously setting the
+length and the allocated size of the buffer in an \f(CW\*(C`SV\*(C'\fR, growing the
+buffer if necessary.
+.IP \(bu 4
+A new API macro \f(CWSvPVCLEAR()\fR sets its \f(CW\*(C`SV\*(C'\fR
+argument to an empty string,
+like Perl-space \f(CW\*(C`$x = \*(Aq\*(Aq\*(C'\fR, but with several optimisations.
+.IP \(bu 4
+Several new macros and functions for dealing with Unicode and
+UTF\-8\-encoded strings have been added to the API, as well as some
+changes in the
+functionality of existing functions (see "Unicode Support" in perlapi for
+more details):
+.RS 4
+.IP \(bu 4
+New versions of the API macros like \f(CW\*(C`isALPHA_utf8\*(C'\fR and \f(CW\*(C`toLOWER_utf8\*(C'\fR
+have been added, each with the suffix \f(CW\*(C`_safe\*(C'\fR, like
+\&\f(CW\*(C`isSPACE_utf8_safe\*(C'\fR. These take an extra
+parameter, giving an upper
+limit of how far into the string it is safe to read. Using the old
+versions could cause attempts to read beyond the end of the input buffer
+if the UTF\-8 is not well-formed, and their use now raises a deprecation
+warning. Details are at "Character classification" in perlapi.
+.IP \(bu 4
+Macros like \f(CW\*(C`isALPHA_utf8\*(C'\fR and
+\&\f(CW\*(C`toLOWER_utf8\*(C'\fR now die if they detect
+that their input UTF\-8 is malformed. A deprecation warning had been
+issued since Perl 5.18.
+.IP \(bu 4
+Several new macros for analysing the validity of utf8 sequences. These
+are:
+.Sp
+\&\f(CW\*(C`UTF8_GOT_ABOVE_31_BIT\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_CONTINUATION\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_EMPTY\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_LONG\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_NONCHAR\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_NON_CONTINUATION\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_OVERFLOW\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_SHORT\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_SUPER\*(C'\fR
+\&\f(CW\*(C`UTF8_GOT_SURROGATE\*(C'\fR
+\&\f(CW\*(C`UTF8_IS_INVARIANT\*(C'\fR
+\&\f(CW\*(C`UTF8_IS_NONCHAR\*(C'\fR
+\&\f(CW\*(C`UTF8_IS_SUPER\*(C'\fR
+\&\f(CW\*(C`UTF8_IS_SURROGATE\*(C'\fR
+\&\f(CW\*(C`UVCHR_IS_INVARIANT\*(C'\fR
+\&\f(CW\*(C`isUTF8_CHAR_flags\*(C'\fR
+\&\f(CW\*(C`isSTRICT_UTF8_CHAR\*(C'\fR
+\&\f(CW\*(C`isC9_STRICT_UTF8_CHAR\*(C'\fR
+.IP \(bu 4
+Functions that are all extensions of the \f(CW\*(C`is_utf8_string_\fR\f(CI*\fR\f(CW()\*(C'\fR functions,
+that apply various restrictions to the UTF\-8 recognized as valid:
+.Sp
+\&\f(CW\*(C`is_strict_utf8_string\*(C'\fR,
+\&\f(CW\*(C`is_strict_utf8_string_loc\*(C'\fR,
+\&\f(CW\*(C`is_strict_utf8_string_loclen\*(C'\fR,
+.Sp
+\&\f(CW\*(C`is_c9strict_utf8_string\*(C'\fR,
+\&\f(CW\*(C`is_c9strict_utf8_string_loc\*(C'\fR,
+\&\f(CW\*(C`is_c9strict_utf8_string_loclen\*(C'\fR,
+.Sp
+\&\f(CW\*(C`is_utf8_string_flags\*(C'\fR,
+\&\f(CW\*(C`is_utf8_string_loc_flags\*(C'\fR,
+\&\f(CW\*(C`is_utf8_string_loclen_flags\*(C'\fR,
+.Sp
+\&\f(CW\*(C`is_utf8_fixed_width_buf_flags\*(C'\fR,
+\&\f(CW\*(C`is_utf8_fixed_width_buf_loc_flags\*(C'\fR,
+\&\f(CW\*(C`is_utf8_fixed_width_buf_loclen_flags\*(C'\fR.
+.Sp
+\&\f(CW\*(C`is_utf8_invariant_string\*(C'\fR.
+\&\f(CW\*(C`is_utf8_valid_partial_char\*(C'\fR.
+\&\f(CW\*(C`is_utf8_valid_partial_char_flags\*(C'\fR.
+.IP \(bu 4
+The functions \f(CW\*(C`utf8n_to_uvchr\*(C'\fR and its
+derivatives have had several changes of behaviour.
+.Sp
+Calling them, while passing a string length of 0 is now asserted against
+in DEBUGGING builds, and otherwise, returns the Unicode REPLACEMENT
+CHARACTER. If you have nothing to decode, you shouldn't call the decode
+function.
+.Sp
+They now return the Unicode REPLACEMENT CHARACTER if called with UTF\-8
+that has the overlong malformation and that malformation is allowed by
+the input parameters. This malformation is where the UTF\-8 looks valid
+syntactically, but there is a shorter sequence that yields the same code
+point. This has been forbidden since Unicode version 3.1.
+.Sp
+They now accept an input
+flag to allow the overflow malformation. This malformation is when the
+UTF\-8 may be syntactically valid, but the code point it represents is
+not capable of being represented in the word length on the platform.
+What "allowed" means, in this case, is that the function doesn't return an
+error, and it advances the parse pointer to beyond the UTF\-8 in
+question, but it returns the Unicode REPLACEMENT CHARACTER as the value
+of the code point (since the real value is not representable).
+.Sp
+They no longer abandon searching for other malformations when the first
+one is encountered. A call to one of these functions thus can generate
+multiple diagnostics, instead of just one.
+.IP \(bu 4
+\&\f(CWvalid_utf8_to_uvchr()\fR has been added
+to the API (although it was
+present in core earlier). Like \f(CWutf8_to_uvchr_buf()\fR, but assumes that
+the next character is well-formed. Use with caution.
+.IP \(bu 4
+A new function, \f(CW\*(C`utf8n_to_uvchr_error\*(C'\fR,
+has been added for
+use by modules that need to know the details of UTF\-8 malformations
+beyond pass/fail. Previously, the only ways to know why a sequence was
+ill-formed was to capture and parse the generated diagnostics or to do
+your own analysis.
+.IP \(bu 4
+There is now a safer version of \fButf8_hop()\fR, called
+\&\f(CWutf8_hop_safe()\fR.
+Unlike \fButf8_hop()\fR, \fButf8_hop_safe()\fR won't navigate before the beginning or
+after the end of the supplied buffer.
+.IP \(bu 4
+Two new functions, \f(CWutf8_hop_forward()\fR and
+\&\f(CWutf8_hop_back()\fR are
+similar to \f(CWutf8_hop_safe()\fR but are for when you know which direction
+you wish to travel.
+.IP \(bu 4
+Two new macros which return useful utf8 byte sequences:
+.Sp
+\&\f(CW\*(C`BOM_UTF8\*(C'\fR
+.Sp
+\&\f(CW\*(C`REPLACEMENT_CHARACTER_UTF8\*(C'\fR
+.RE
+.RS 4
+.RE
+.IP \(bu 4
+Perl is now built with the \f(CW\*(C`PERL_OP_PARENT\*(C'\fR compiler define enabled by
+default. To disable it, use the \f(CW\*(C`PERL_NO_OP_PARENT\*(C'\fR compiler define.
+This flag alters how the \f(CW\*(C`op_sibling\*(C'\fR field is used in \f(CW\*(C`OP\*(C'\fR structures,
+and has been available optionally since perl 5.22.
+.Sp
+See "Internal Changes" in perl5220delta for more details of what this
+build option does.
+.IP \(bu 4
+Three new ops, \f(CW\*(C`OP_ARGELEM\*(C'\fR, \f(CW\*(C`OP_ARGDEFELEM\*(C'\fR, and \f(CW\*(C`OP_ARGCHECK\*(C'\fR have
+been added. These are intended principally to implement the individual
+elements of a subroutine signature, plus any overall checking required.
+.IP \(bu 4
+The \f(CW\*(C`OP_PUSHRE\*(C'\fR op has been eliminated and the \f(CW\*(C`OP_SPLIT\*(C'\fR op has been
+changed from class \f(CW\*(C`LISTOP\*(C'\fR to \f(CW\*(C`PMOP\*(C'\fR.
+.Sp
+Formerly the first child of a split would be a \f(CW\*(C`pushre\*(C'\fR, which would have the
+\&\f(CW\*(C`split\*(C'\fR's regex attached to it. Now the regex is attached directly to the
+\&\f(CW\*(C`split\*(C'\fR op, and the \f(CW\*(C`pushre\*(C'\fR has been eliminated.
+.IP \(bu 4
+The \f(CWop_class()\fR API function has been added. This
+is like the existing
+\&\f(CWOP_CLASS()\fR macro, but can more accurately determine what struct an op
+has been allocated as. For example \f(CWOP_CLASS()\fR might return
+\&\f(CW\*(C`OA_BASEOP_OR_UNOP\*(C'\fR indicating that ops of this type are usually
+allocated as an \f(CW\*(C`OP\*(C'\fR or \f(CW\*(C`UNOP\*(C'\fR; while \f(CWop_class()\fR will return
+\&\f(CW\*(C`OPclass_BASEOP\*(C'\fR or \f(CW\*(C`OPclass_UNOP\*(C'\fR as appropriate.
+.IP \(bu 4
+All parts of the internals now agree that the \f(CW\*(C`sassign\*(C'\fR op is a \f(CW\*(C`BINOP\*(C'\fR;
+previously it was listed as a \f(CW\*(C`BASEOP\*(C'\fR in \fIregen/opcodes\fR, which meant
+that several parts of the internals had to be special-cased to accommodate
+it. This oddity's original motivation was to handle code like \f(CW\*(C`$x ||= 1\*(C'\fR;
+that is now handled in a simpler way.
+.IP \(bu 4
+The output format of the \f(CWop_dump()\fR function (as
+used by \f(CW\*(C`perl \-Dx\*(C'\fR)
+has changed: it now displays an "ASCII-art" tree structure, and shows more
+low-level details about each op, such as its address and class.
+.IP \(bu 4
+The \f(CW\*(C`PADOFFSET\*(C'\fR type has changed from being unsigned to signed, and
+several pad-related variables such as \f(CW\*(C`PL_padix\*(C'\fR have changed from being
+of type \f(CW\*(C`I32\*(C'\fR to type \f(CW\*(C`PADOFFSET\*(C'\fR.
+.IP \(bu 4
+The \f(CW\*(C`DEBUGGING\*(C'\fR\-mode output for regex compilation and execution has been
+enhanced.
+.IP \(bu 4
+Several obscure SV flags have been eliminated, sometimes along with the
+macros which manipulate them: \f(CW\*(C`SVpbm_VALID\*(C'\fR, \f(CW\*(C`SVpbm_TAIL\*(C'\fR, \f(CW\*(C`SvTAIL_on\*(C'\fR,
+\&\f(CW\*(C`SvTAIL_off\*(C'\fR, \f(CW\*(C`SVrepl_EVAL\*(C'\fR, \f(CW\*(C`SvEVALED\*(C'\fR.
+.IP \(bu 4
+An OP \f(CW\*(C`op_private\*(C'\fR flag has been eliminated: \f(CW\*(C`OPpRUNTIME\*(C'\fR. This used to
+often get set on \f(CW\*(C`PMOP\*(C'\fR ops, but had become meaningless over time.
+.SH "Selected Bug Fixes"
+.IX Header "Selected Bug Fixes"
+.IP \(bu 4
+Perl no longer panics when switching into some locales on machines with
+buggy \f(CWstrxfrm()\fR implementations in their \fIlibc\fR.
+[GH #13768] <https://github.com/Perl/perl5/issues/13768>
+.IP \(bu 4
+\&\f(CW\*(C` $\-{$name} \*(C'\fR would leak an \f(CW\*(C`AV\*(C'\fR on each access if the regular
+expression had no named captures. The same applies to access to any
+hash tied with Tie::Hash::NamedCapture and \f(CW\*(C`all => 1\*(C'\fR.
+[GH #15882] <https://github.com/Perl/perl5/issues/15882>
+.IP \(bu 4
+Attempting to use the deprecated variable \f(CW$#\fR as the object in an
+indirect object method call could cause a heap use after free or
+buffer overflow.
+[GH #15599] <https://github.com/Perl/perl5/issues/15599>
+.IP \(bu 4
+When checking for an indirect object method call, in some rare cases
+the parser could reallocate the line buffer but then continue to use
+pointers to the old buffer.
+[GH #15585] <https://github.com/Perl/perl5/issues/15585>
+.IP \(bu 4
+Supplying a glob as the format argument to
+\&\f(CW\*(C`formline\*(C'\fR would
+cause an assertion failure.
+[GH #15862] <https://github.com/Perl/perl5/issues/15862>
+.IP \(bu 4
+Code like \f(CW\*(C` $value1 =~ qr/.../ ~~ $value2 \*(C'\fR would have the match
+converted into a \f(CW\*(C`qr//\*(C'\fR operator, leaving extra elements on the stack to
+confuse any surrounding expression.
+[GH #15859] <https://github.com/Perl/perl5/issues/15859>
+.IP \(bu 4
+Since v5.24 in some obscure cases, a regex which included code blocks
+from multiple sources (\fIe.g.\fR, via embedded via \f(CW\*(C`qr//\*(C'\fR objects) could end up
+with the wrong current pad and crash or give weird results.
+[GH #15657] <https://github.com/Perl/perl5/issues/15657>
+.IP \(bu 4
+Occasionally \f(CWlocal()\fRs in a code block within a patterns weren't being
+undone when the pattern matching backtracked over the code block.
+[GH #15056] <https://github.com/Perl/perl5/issues/15056>
+.IP \(bu 4
+Using \f(CWsubstr()\fR to modify a magic variable could access freed memory
+in some cases.
+[GH #15871] <https://github.com/Perl/perl5/issues/15871>
+.IP \(bu 4
+Under \f(CW\*(C`use utf8\*(C'\fR, the entire source code is now checked for being UTF\-8
+well formed, not just quoted strings as before.
+[GH #14973] <https://github.com/Perl/perl5/issues/14973>.
+.IP \(bu 4
+The range operator \f(CW".."\fR on strings now handles its arguments correctly when in
+the scope of the \f(CW\*(C`unicode_strings\*(C'\fR
+feature. The previous behaviour was sufficiently unexpected that we believe no
+correct program could have made use of it.
+.IP \(bu 4
+The \f(CW\*(C`split\*(C'\fR operator did not ensure enough space was allocated for
+its return value in scalar context. It could then write a single
+pointer immediately beyond the end of the memory block allocated for
+the stack.
+[GH #15749] <https://github.com/Perl/perl5/issues/15749>
+.IP \(bu 4
+Using a large code point with the \f(CW"W"\fR pack template character with
+the current output position aligned at just the right point could
+cause a write of a single zero byte immediately beyond the end of an
+allocated buffer.
+[GH #15572] <https://github.com/Perl/perl5/issues/15572>
+.IP \(bu 4
+Supplying a format's picture argument as part of the format argument list
+where the picture specifies modifying the argument could cause an
+access to the new freed compiled format.
+[GH #15566] <https://github.com/Perl/perl5/issues/15566>
+.IP \(bu 4
+The \fBsort()\fR operator's built-in numeric comparison
+function didn't handle large integers that weren't exactly
+representable by a double. This now uses the same code used to
+implement the \f(CW\*(C`<=>\*(C'\fR operator.
+[GH #15768] <https://github.com/Perl/perl5/issues/15768>
+.IP \(bu 4
+Fix issues with \f(CW\*(C`/(?{ ... <<EOF })/\*(C'\fR that broke
+Method::Signatures.
+[GH #15779] <https://github.com/Perl/perl5/issues/15779>
+.IP \(bu 4
+Fixed an assertion failure with \f(CW\*(C`chop\*(C'\fR and \f(CW\*(C`chomp\*(C'\fR, which
+could be triggered by \f(CW\*(C`chop(@x =~ tr/1/1/)\*(C'\fR.
+[GH #15738] <https://github.com/Perl/perl5/issues/15738>.
+.IP \(bu 4
+Fixed a comment skipping error in patterns under \f(CW\*(C`/x\*(C'\fR; it could stop
+skipping a byte early, which could be in the middle of a UTF\-8
+character.
+[GH #15790] <https://github.com/Perl/perl5/issues/15790>.
+.IP \(bu 4
+\&\fIperldb\fR now ignores \fI/dev/tty\fR on non-Unix systems.
+[GH #12244] <https://github.com/Perl/perl5/issues/12244>;
+.IP \(bu 4
+Fix assertion failure for \f(CW\*(C`{}\->$x\*(C'\fR when \f(CW$x\fR isn't defined.
+[GH #15791] <https://github.com/Perl/perl5/issues/15791>.
+.IP \(bu 4
+Fix an assertion error which could be triggered when a lookahead string
+in patterns exceeded a minimum length.
+[GH #15796] <https://github.com/Perl/perl5/issues/15796>.
+.IP \(bu 4
+Only warn once per literal number about a misplaced \f(CW"_"\fR.
+[GH #9989] <https://github.com/Perl/perl5/issues/9989>.
+.IP \(bu 4
+The \f(CW\*(C`tr///\*(C'\fR parse code could be looking at uninitialized data after a
+perse error.
+[GH #15624] <https://github.com/Perl/perl5/issues/15624>.
+.IP \(bu 4
+In a pattern match, a back-reference (\f(CW\*(C`\e1\*(C'\fR) to an unmatched capture could
+read back beyond the start of the string being matched.
+[GH #15634] <https://github.com/Perl/perl5/issues/15634>.
+.IP \(bu 4
+\&\f(CW\*(C`use re \*(Aqstrict\*(Aq\*(C'\fR is supposed to warn if you use a range (such as
+\&\f(CW\*(C`/(?[ [ X\-Y ] ])/\*(C'\fR) whose start and end digit aren't from the same group
+of 10. It didn't do that for five groups of mathematical digits starting
+at \f(CW\*(C`U+1D7E\*(C'\fR.
+.IP \(bu 4
+A sub containing a "forward" declaration with the same name (\fIe.g.\fR,
+\&\f(CW\*(C`sub c { sub c; }\*(C'\fR) could sometimes crash or loop infinitely.
+[GH #15557] <https://github.com/Perl/perl5/issues/15557>
+.IP \(bu 4
+A crash in executing a regex with a non-anchored UTF\-8 substring against a
+target string that also used UTF\-8 has been fixed.
+[GH #15628] <https://github.com/Perl/perl5/issues/15628>
+.IP \(bu 4
+Previously, a shebang line like \f(CW\*(C`#!perl \-i u\*(C'\fR could be erroneously
+interpreted as requesting the \f(CW\*(C`\-u\*(C'\fR option. This has been fixed.
+[GH #15623] <https://github.com/Perl/perl5/issues/15623>
+.IP \(bu 4
+The regex engine was previously producing incorrect results in some rare
+situations when backtracking past an alternation that matches only one
+thing; this
+showed up as capture buffers (\f(CW$1\fR, \f(CW$2\fR, \fIetc.\fR) erroneously containing data
+from regex execution paths that weren't actually executed for the final
+match.
+[GH #15666] <https://github.com/Perl/perl5/issues/15666>
+.IP \(bu 4
+Certain regexes making use of the experimental \f(CW\*(C`regex_sets\*(C'\fR feature could
+trigger an assertion failure. This has been fixed.
+[GH #15620] <https://github.com/Perl/perl5/issues/15620>
+.IP \(bu 4
+Invalid assignments to a reference constructor (\fIe.g.\fR, \f(CW\*(C`\eeval=time\*(C'\fR) could
+sometimes crash in addition to giving a syntax error.
+[GH #14815] <https://github.com/Perl/perl5/issues/14815>
+.IP \(bu 4
+The parser could sometimes crash if a bareword came after \f(CW\*(C`evalbytes\*(C'\fR.
+[GH #15586] <https://github.com/Perl/perl5/issues/15586>
+.IP \(bu 4
+Autoloading via a method call would warn erroneously ("Use of inherited
+AUTOLOAD for non-method") if there was a stub present in the package into
+which the invocant had been blessed. The warning is no longer emitted in
+such circumstances.
+[GH #9094] <https://github.com/Perl/perl5/issues/9094>
+.IP \(bu 4
+The use of \f(CW\*(C`splice\*(C'\fR on arrays with non-existent elements could cause other
+operators to crash.
+[GH #15577] <https://github.com/Perl/perl5/issues/15577>
+.IP \(bu 4
+A possible buffer overrun when a pattern contains a fixed utf8 substring.
+[GH #15534] <https://github.com/Perl/perl5/issues/15534>
+.IP \(bu 4
+Fixed two possible use-after-free bugs in perl's lexer.
+[GH #15549] <https://github.com/Perl/perl5/issues/15549>
+.IP \(bu 4
+Fixed a crash with \f(CW\*(C`s///l\*(C'\fR where it thought it was dealing with UTF\-8
+when it wasn't.
+[GH #15543] <https://github.com/Perl/perl5/issues/15543>
+.IP \(bu 4
+Fixed a place where the regex parser was not setting the syntax error
+correctly on a syntactically incorrect pattern.
+[GH #15565] <https://github.com/Perl/perl5/issues/15565>
+.IP \(bu 4
+The \f(CW\*(C`&.\*(C'\fR operator (and the \f(CW"&"\fR operator, when it treats its arguments as
+strings) were failing to append a trailing null byte if at least one string
+was marked as utf8 internally. Many code paths (system calls, regexp
+compilation) still expect there to be a null byte in the string buffer
+just past the end of the logical string. An assertion failure was the
+result.
+[GH #15606] <https://github.com/Perl/perl5/issues/15606>
+.IP \(bu 4
+Avoid a heap-after-use error in the parser when creating an error messge
+for a syntactically invalid heredoc.
+[GH #15527] <https://github.com/Perl/perl5/issues/15527>
+.IP \(bu 4
+Fix a segfault when run with \f(CW\*(C`\-DC\*(C'\fR options on DEBUGGING builds.
+[GH #15563] <https://github.com/Perl/perl5/issues/15563>
+.IP \(bu 4
+Fixed the parser error handling in subroutine attributes for an
+\&'\f(CW\*(C`:attr(foo\*(C'\fR' that does not have an ending '\f(CW")"\fR'.
+.IP \(bu 4
+Fix the perl lexer to correctly handle a backslash as the last char in
+quoted-string context. This actually fixed two bugs,
+[GH #15546] <https://github.com/Perl/perl5/issues/15546> and
+[GH #15582] <https://github.com/Perl/perl5/issues/15582>.
+.IP \(bu 4
+In the API function \f(CW\*(C`gv_fetchmethod_pvn_flags\*(C'\fR, rework separator parsing
+to prevent possible string overrun with an invalid \f(CW\*(C`len\*(C'\fR argument.
+[GH #15598] <https://github.com/Perl/perl5/issues/15598>
+.IP \(bu 4
+Problems with in-place array sorts: code like \f(CW\*(C`@a = sort { ... } @a\*(C'\fR,
+where the source and destination of the sort are the same plain array, are
+optimised to do less copying around. Two side-effects of this optimisation
+were that the contents of \f(CW@a\fR as seen by sort routines were
+partially sorted; and under some circumstances accessing \f(CW@a\fR during the
+sort could crash the interpreter. Both these issues have been fixed, and
+Sort functions see the original value of \f(CW@a\fR.
+[GH #15387] <https://github.com/Perl/perl5/issues/15387>
+.IP \(bu 4
+Non-ASCII string delimiters are now reported correctly in error messages
+for unterminated strings.
+[GH #15469] <https://github.com/Perl/perl5/issues/15469>
+.IP \(bu 4
+\&\f(CW\*(C`pack("p", ...)\*(C'\fR used to emit its warning ("Attempt to pack pointer to
+temporary value") erroneously in some cases, but has been fixed.
+.IP \(bu 4
+\&\f(CW@DB::args\fR is now exempt from "used once" warnings. The warnings only
+occurred under \fB\-w\fR, because \fIwarnings.pm\fR itself uses \f(CW@DB::args\fR
+multiple times.
+.IP \(bu 4
+The use of built-in arrays or hash slices in a double-quoted string no
+longer issues a warning ("Possible unintended interpolation...") if the
+variable has not been mentioned before. This affected code like
+\&\f(CW\*(C`qq|@DB::args|\*(C'\fR and \f(CW\*(C`qq|@SIG{\*(AqCHLD\*(Aq, \*(AqHUP\*(Aq}|\*(C'\fR. (The special variables
+\&\f(CW\*(C`@\-\*(C'\fR and \f(CW\*(C`@+\*(C'\fR were already exempt from the warning.)
+.IP \(bu 4
+\&\f(CW\*(C`gethostent\*(C'\fR and similar functions now perform a null check internally, to
+avoid crashing with the torsocks library. This was a regression from v5.22.
+[GH #15478] <https://github.com/Perl/perl5/issues/15478>
+.IP \(bu 4
+\&\f(CW\*(C`defined *{\*(Aq!\*(Aq}\*(C'\fR, \f(CW\*(C`defined *{\*(Aq[\*(Aq}\*(C'\fR, and \f(CW\*(C`defined *{\*(Aq\-\*(Aq}\*(C'\fR no longer leak
+memory if the typeglob in question has never been accessed before.
+.IP \(bu 4
+Mentioning the same constant twice in a row (which is a syntax error) no
+longer fails an assertion under debugging builds. This was a regression
+from v5.20.
+[GH #15017] <https://github.com/Perl/perl5/issues/15017>
+.IP \(bu 4
+Many issues relating to \f(CW\*(C`printf "%a"\*(C'\fR of hexadecimal floating point
+were fixed. In addition, the "subnormals" (formerly known as "denormals")
+floating point numbers are now supported both with the plain IEEE 754
+floating point numbers (64\-bit or 128\-bit) and the x86 80\-bit
+"extended precision". Note that subnormal hexadecimal floating
+point literals will give a warning about "exponent underflow".
+[GH #15495] <https://github.com/Perl/perl5/issues/15495>
+[GH #15503] <https://github.com/Perl/perl5/issues/15503>
+[GH #15504] <https://github.com/Perl/perl5/issues/15504>
+[GH #15505] <https://github.com/Perl/perl5/issues/15505>
+[GH #15510] <https://github.com/Perl/perl5/issues/15510>
+[GH #15512] <https://github.com/Perl/perl5/issues/15512>
+.IP \(bu 4
+A regression in v5.24 with \f(CW\*(C`tr/\eN{U+...}/foo/\*(C'\fR when the code point was between
+128 and 255 has been fixed.
+[GH #15475] <https://github.com/Perl/perl5/issues/15475>.
+.IP \(bu 4
+Use of a string delimiter whose code point is above 2**31 now works
+correctly on platforms that allow this. Previously, certain characters,
+due to truncation, would be confused with other delimiter characters
+with special meaning (such as \f(CW"?"\fR in \f(CW\*(C`m?...?\*(C'\fR), resulting
+in inconsistent behaviour. Note that this is non-portable,
+and is based on Perl's extension to UTF\-8, and is probably not
+displayable nor enterable by any editor.
+[GH #15477] <https://github.com/Perl/perl5/issues/15477>
+.IP \(bu 4
+\&\f(CW\*(C`@{x\*(C'\fR followed by a newline where \f(CW"x"\fR represents a control or non-ASCII
+character no longer produces a garbled syntax error message or a crash.
+[GH #15518] <https://github.com/Perl/perl5/issues/15518>
+.IP \(bu 4
+An assertion failure with \f(CW\*(C`%: = 0\*(C'\fR has been fixed.
+[GH #15358] <https://github.com/Perl/perl5/issues/15358>
+.IP \(bu 4
+In Perl 5.18, the parsing of \f(CW"$foo::$bar"\fR was accidentally changed, such
+that it would be treated as \f(CW\*(C`$foo."::".$bar\*(C'\fR. The previous behavior, which
+was to parse it as \f(CW\*(C`$foo:: . $bar\*(C'\fR, has been restored.
+[GH #15408] <https://github.com/Perl/perl5/issues/15408>
+.IP \(bu 4
+Since Perl 5.20, line numbers have been off by one when perl is invoked with
+the \fB\-x\fR switch. This has been fixed.
+[GH #15413] <https://github.com/Perl/perl5/issues/15413>
+.IP \(bu 4
+Vivifying a subroutine stub in a deleted stash (\fIe.g.\fR,
+\&\f(CW\*(C`delete $My::{"Foo::"}; \e&My::Foo::foo\*(C'\fR) no longer crashes. It had begun
+crashing in Perl 5.18.
+[GH #15420] <https://github.com/Perl/perl5/issues/15420>
+.IP \(bu 4
+Some obscure cases of subroutines and file handles being freed at the same time
+could result in crashes, but have been fixed. The crash was introduced in Perl
+5.22.
+[GH #15435] <https://github.com/Perl/perl5/issues/15435>
+.IP \(bu 4
+Code that looks for a variable name associated with an uninitialized value
+could cause an assertion failure in cases where magic is involved, such as
+\&\f(CW\*(C`$ISA[0][0]\*(C'\fR. This has now been fixed.
+[GH #15364] <https://github.com/Perl/perl5/issues/15364>
+.IP \(bu 4
+A crash caused by code generating the warning "Subroutine STASH::NAME
+redefined" in cases such as \f(CW\*(C`sub P::f{} undef *P::; *P::f =sub{};\*(C'\fR has been
+fixed. In these cases, where the STASH is missing, the warning will now appear
+as "Subroutine NAME redefined".
+[GH #15368] <https://github.com/Perl/perl5/issues/15368>
+.IP \(bu 4
+Fixed an assertion triggered by some code that handles deprecated behavior in
+formats, \fIe.g.\fR, in cases like this:
+.Sp
+.Vb 3
+\& format STDOUT =
+\& @
+\& 0"$x"
+.Ve
+.Sp
+[GH #15366] <https://github.com/Perl/perl5/issues/15366>
+.IP \(bu 4
+A possible divide by zero in string transformation code on Windows has been
+avoided, fixing a crash when collating an empty string.
+[GH #15439] <https://github.com/Perl/perl5/issues/15439>
+.IP \(bu 4
+Some regular expression parsing glitches could lead to assertion failures with
+regular expressions such as \f(CW\*(C`/(?<=/\*(C'\fR and \f(CW\*(C`/(?<!/\*(C'\fR. This has now been fixed.
+[GH #15332] <https://github.com/Perl/perl5/issues/15332>
+.IP \(bu 4
+\&\f(CW\*(C` until ($x = 1) { ... } \*(C'\fR and \f(CW\*(C` ... until $x = 1 \*(C'\fR now properly
+warn when syntax warnings are enabled.
+[GH #15138] <https://github.com/Perl/perl5/issues/15138>
+.IP \(bu 4
+\&\fBsocket()\fR now leaves the error code returned by the system in \f(CW$!\fR on
+failure.
+[GH #15383] <https://github.com/Perl/perl5/issues/15383>
+.IP \(bu 4
+Assignment variants of any bitwise ops under the \f(CW\*(C`bitwise\*(C'\fR feature would
+crash if the left-hand side was an array or hash.
+[GH #15346] <https://github.com/Perl/perl5/issues/15346>
+.IP \(bu 4
+\&\f(CW\*(C`require\*(C'\fR followed by a single colon (as in \f(CW\*(C`foo() ? require : ...\*(C'\fR is
+now parsed correctly as \f(CW\*(C`require\*(C'\fR with implicit \f(CW$_\fR, rather than
+\&\f(CW\*(C`require ""\*(C'\fR.
+[GH #15380] <https://github.com/Perl/perl5/issues/15380>
+.IP \(bu 4
+Scalar \f(CW\*(C`keys %hash\*(C'\fR can now be assigned to consistently in all scalar
+lvalue contexts. Previously it worked for some contexts but not others.
+.IP \(bu 4
+List assignment to \f(CW\*(C`vec\*(C'\fR or \f(CW\*(C`substr\*(C'\fR with an array or hash for its first
+argument used to result in crashes or "Can't coerce" error messages at run
+time, unlike scalar assignment, which would give an error at compile time.
+List assignment now gives a compile-time error, too.
+[GH #15370] <https://github.com/Perl/perl5/issues/15370>
+.IP \(bu 4
+Expressions containing an \f(CW\*(C`&&\*(C'\fR or \f(CW\*(C`||\*(C'\fR operator (or their synonyms \f(CW\*(C`and\*(C'\fR
+and \f(CW\*(C`or\*(C'\fR) were being compiled incorrectly in some cases. If the left-hand
+side consisted of either a negated bareword constant or a negated \f(CW\*(C`do {}\*(C'\fR
+block containing a constant expression, and the right-hand side consisted of
+a negated non-foldable expression, one of the negations was effectively
+ignored. The same was true of \f(CW\*(C`if\*(C'\fR and \f(CW\*(C`unless\*(C'\fR statement modifiers,
+though with the left-hand and right-hand sides swapped. This long-standing
+bug has now been fixed.
+[GH #15285] <https://github.com/Perl/perl5/issues/15285>
+.IP \(bu 4
+\&\f(CW\*(C`reset\*(C'\fR with an argument no longer crashes when encountering stash entries
+other than globs.
+[GH #15314] <https://github.com/Perl/perl5/issues/15314>
+.IP \(bu 4
+Assignment of hashes to, and deletion of, typeglobs named \f(CW*::::::\fR no
+longer causes crashes.
+[GH #15307] <https://github.com/Perl/perl5/issues/15307>
+.IP \(bu 4
+Perl wasn't correctly handling true/false values in the LHS of a list
+assign; specifically the truth values returned by boolean operators.
+This could trigger an assertion failure in something like the following:
+.Sp
+.Vb 3
+\& for ($x > $y) {
+\& ($_, ...) = (...); # here $_ is aliased to a truth value
+\& }
+.Ve
+.Sp
+This was a regression from v5.24.
+[GH #15690] <https://github.com/Perl/perl5/issues/15690>
+.IP \(bu 4
+Assertion failure with user-defined Unicode-like properties.
+[GH #15696] <https://github.com/Perl/perl5/issues/15696>
+.IP \(bu 4
+Fix error message for unclosed \f(CW\*(C`\eN{\*(C'\fR in a regex. An unclosed \f(CW\*(C`\eN{\*(C'\fR
+could give the wrong error message:
+\&\f(CW"\eN{NAME} must be resolved by the lexer"\fR.
+.IP \(bu 4
+List assignment in list context where the LHS contained aggregates and
+where there were not enough RHS elements, used to skip scalar lvalues.
+Previously, \f(CW\*(C`(($a,$b,@c,$d) = (1))\*(C'\fR in list context returned \f(CW\*(C`($a)\*(C'\fR; now
+it returns \f(CW\*(C`($a,$b,$d)\*(C'\fR. \f(CW\*(C`(($a,$b,$c) = (1))\*(C'\fR is unchanged: it still
+returns \f(CW\*(C`($a,$b,$c)\*(C'\fR. This can be seen in the following:
+.Sp
+.Vb 2
+\& sub inc { $_++ for @_ }
+\& inc(($a,$b,@c,$d) = (10))
+.Ve
+.Sp
+Formerly, the values of \f(CW\*(C`($a,$b,$d)\*(C'\fR would be left as \f(CW\*(C`(11,undef,undef)\*(C'\fR;
+now they are \f(CW\*(C`(11,1,1)\*(C'\fR.
+.IP \(bu 4
+Code like this: \f(CW\*(C`/(?{ s!!! })/\*(C'\fR could trigger infinite recursion on the C
+stack (not the normal perl stack) when the last successful pattern in
+scope is itself. We avoid the segfault by simply forbidding the use of
+the empty pattern when it would resolve to the currently executing
+pattern.
+[GH #15669] <https://github.com/Perl/perl5/issues/15669>
+.IP \(bu 4
+Avoid reading beyond the end of the line buffer in perl's lexer when
+there's a short UTF\-8 character at the end.
+[GH #15531] <https://github.com/Perl/perl5/issues/15531>
+.IP \(bu 4
+Alternations in regular expressions were sometimes failing to match
+a utf8 string against a utf8 alternate.
+[GH #15680] <https://github.com/Perl/perl5/issues/15680>
+.IP \(bu 4
+Make \f(CW\*(C`do "a\e0b"\*(C'\fR fail silently (and return \f(CW\*(C`undef\*(C'\fR and set \f(CW$!\fR)
+instead of throwing an error.
+[GH #15676] <https://github.com/Perl/perl5/issues/15676>
+.IP \(bu 4
+\&\f(CW\*(C`chdir\*(C'\fR with no argument didn't ensure that there was stack space
+available for returning its result.
+[GH #15569] <https://github.com/Perl/perl5/issues/15569>
+.IP \(bu 4
+All error messages related to \f(CW\*(C`do\*(C'\fR now refer to \f(CW\*(C`do\*(C'\fR; some formerly
+claimed to be from \f(CW\*(C`require\*(C'\fR instead.
+.IP \(bu 4
+Executing \f(CW\*(C`undef $x\*(C'\fR where \f(CW$x\fR is tied or magical no longer incorrectly
+blames the variable for an uninitialized-value warning encountered by the
+tied/magical code.
+.IP \(bu 4
+Code like \f(CW\*(C`$x = $x . "a"\*(C'\fR was incorrectly failing to yield a
+use of uninitialized value
+warning when \f(CW$x\fR was a lexical variable with an undefined value. That has
+now been fixed.
+[GH #15269] <https://github.com/Perl/perl5/issues/15269>
+.IP \(bu 4
+\&\f(CW\*(C`undef *_; shift\*(C'\fR or \f(CW\*(C`undef *_; pop\*(C'\fR inside a subroutine, with no
+argument to \f(CW\*(C`shift\*(C'\fR or \f(CW\*(C`pop\*(C'\fR, began crashing in Perl 5.14, but has now
+been fixed.
+.IP \(bu 4
+\&\f(CW"string$scalar\->$*"\fR now correctly prefers concatenation
+overloading to string overloading if \f(CW\*(C`$scalar\->$*\*(C'\fR returns an
+overloaded object, bringing it into consistency with \f(CW$$scalar\fR.
+.IP \(bu 4
+\&\f(CW\*(C`/@0{0*\->@*/*0\*(C'\fR and similar contortions used to crash, but no longer
+do, but merely produce a syntax error.
+[GH #15333] <https://github.com/Perl/perl5/issues/15333>
+.IP \(bu 4
+\&\f(CW\*(C`do\*(C'\fR or \f(CW\*(C`require\*(C'\fR with an argument which is a reference or typeglob
+which, when stringified,
+contains a null character, started crashing in Perl 5.20, but has now been
+fixed.
+[GH #15337] <https://github.com/Perl/perl5/issues/15337>
+.IP \(bu 4
+Improve the error message for a missing \f(CWtie()\fR package/method. This
+brings the error messages in line with the ones used for normal method
+calls.
+.IP \(bu 4
+Parsing bad POSIX charclasses no longer leaks memory.
+[GH #15382] <https://github.com/Perl/perl5/issues/15382>
+.SH "Known Problems"
+.IX Header "Known Problems"
+.IP \(bu 4
+G++ 6 handles subnormal (denormal) floating point values differently
+than gcc 6 or g++ 5 resulting in "flush-to-zero". The end result is
+that if you specify very small values using the hexadecimal floating
+point format, like \f(CW\*(C`0x1.fffffffffffffp\-1022\*(C'\fR, they become zeros.
+[GH #15990] <https://github.com/Perl/perl5/issues/15990>
+.SH "Errata From Previous Releases"
+.IX Header "Errata From Previous Releases"
+.IP \(bu 4
+Fixed issues with recursive regexes. The behavior was fixed in Perl 5.24.
+[GH #14935] <https://github.com/Perl/perl5/issues/14935>
+.SH Obituary
+.IX Header "Obituary"
+Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community
+member, has passed away on August 10, 2016. He will be remembered and
+missed by all those who he came in contact with, and enriched with his
+intellect, wit, and spirit.
+.PP
+It is with great sadness that we also note Kip Hampton's passing. Probably
+best known as the author of the Perl & XML column on XML.com, he was a
+core contributor to AxKit, an XML server platform that became an Apache
+Foundation project. He was a frequent speaker in the early days at
+OSCON, and most recently at YAPC::NA in Madison. He was frequently on
+irc.perl.org as ubu, generally in the #axkit\-dahut community, the
+group responsible for YAPC::NA Asheville in 2011.
+.PP
+Kip and his constant contributions to the community will be greatly
+missed.
+.SH Acknowledgements
+.IX Header "Acknowledgements"
+Perl 5.26.0 represents approximately 13 months of development since Perl 5.24.0
+and contains approximately 360,000 lines of changes across 2,600 files from 86
+authors.
+.PP
+Excluding auto-generated files, documentation and release tools, there were
+approximately 230,000 lines of changes to 1,800 .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.26.0:
+.PP
+Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas
+König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad
+Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb, Christian Hansen,
+Christian Millour, Colin Newell, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan
+Collins, Daniel Dragan, Dave Cross, Dave Rolsky, David Golden, David H.
+Gutteridge, David Mitchell, Dominic Hargreaves, Doug Bell, E. Choroba, Ed Avis,
+Father Chrysostomos, François Perrad, Hauke D, H.Merijn Brand, Hugo van der
+Sanden, Ivan Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry
+D. Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge, Karl
+Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell Carey, Misty
+De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul
+Marquess, Peter Avalos, Petr Písař, Pino Toscano, Rafael Garcia-Suarez, Reini
+Urban, Renee Baecker, Ricardo Signes, Richard Levitte, Rick Delaney, Salvador
+Fandiño, Samuel Thibault, Sawyer X, Sébastien Aperghis-Tramoni, Sergey
+Aleynikov, Shlomi Fish, Smylers, Stefan Seifert, Steffen Müller, Stevan
+Little, Steve Hay, Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley,
+Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav Kuzmin,
+Yves Orton, 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 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 \f(CW\*(C`perlbug@perl.org\*(C'\fR 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 "Give Thanks"
+.IX Header "Give Thanks"
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the \f(CW\*(C`perlthanks\*(C'\fR program:
+.PP
+.Vb 1
+\& perlthanks
+.Ve
+.PP
+This will send an email to the Perl 5 Porters list with your show of thanks.
+.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.