summaryrefslogtreecommitdiffstats
path: root/upstream/fedora-40/man1/perl5160delta.1
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/fedora-40/man1/perl5160delta.1')
-rw-r--r--upstream/fedora-40/man1/perl5160delta.13342
1 files changed, 3342 insertions, 0 deletions
diff --git a/upstream/fedora-40/man1/perl5160delta.1 b/upstream/fedora-40/man1/perl5160delta.1
new file mode 100644
index 00000000..2f8a7813
--- /dev/null
+++ b/upstream/fedora-40/man1/perl5160delta.1
@@ -0,0 +1,3342 @@
+.\" -*- 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 "PERL5160DELTA 1"
+.TH PERL5160DELTA 1 2024-01-25 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+perl5160delta \- what is new for perl v5.16.0
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This document describes differences between the 5.14.0 release and
+the 5.16.0 release.
+.PP
+If you are upgrading from an earlier release such as 5.12.0, first read
+perl5140delta, which describes differences between 5.12.0 and
+5.14.0.
+.PP
+Some bug fixes in this release have been backported to later
+releases of 5.14.x. Those are indicated with the 5.14.x version in
+parentheses.
+.SH Notice
+.IX Header "Notice"
+With the release of Perl 5.16.0, the 5.12.x series of releases is now out of
+its support period. There may be future 5.12.x releases, but only in the
+event of a critical security issue. Users of Perl 5.12 or earlier should
+consider upgrading to a more recent release of Perl.
+.PP
+This policy is described in greater detail in
+perlpolicy.
+.SH "Core Enhancements"
+.IX Header "Core Enhancements"
+.ie n .SS """use \fIVERSION\fP"""
+.el .SS "\f(CWuse \fP\f(CIVERSION\fP\f(CW\fP"
+.IX Subsection "use VERSION"
+As of this release, version declarations like \f(CW\*(C`use v5.16\*(C'\fR now disable
+all features before enabling the new feature bundle. This means that
+the following holds true:
+.PP
+.Vb 4
+\& use 5.016;
+\& # only 5.16 features enabled here
+\& use 5.014;
+\& # only 5.14 features enabled here (not 5.16)
+.Ve
+.PP
+\&\f(CW\*(C`use v5.12\*(C'\fR and higher continue to enable strict, but explicit \f(CW\*(C`use
+strict\*(C'\fR and \f(CW\*(C`no strict\*(C'\fR now override the version declaration, even
+when they come first:
+.PP
+.Vb 3
+\& no strict;
+\& use 5.012;
+\& # no strict here
+.Ve
+.PP
+There is a new ":default" feature bundle that represents the set of
+features enabled before any version declaration or \f(CW\*(C`use feature\*(C'\fR has
+been seen. Version declarations below 5.10 now enable the ":default"
+feature set. This does not actually change the behavior of \f(CW\*(C`use
+v5.8\*(C'\fR, because features added to the ":default" set are those that were
+traditionally enabled by default, before they could be turned off.
+.PP
+\&\f(CW\*(C`no feature\*(C'\fR now resets to the default feature set. To disable all
+features (which is likely to be a pretty special-purpose request, since
+it presumably won't match any named set of semantics) you can now
+write \f(CW\*(C`no feature \*(Aq:all\*(Aq\*(C'\fR.
+.PP
+\&\f(CW$[\fR is now disabled under \f(CW\*(C`use v5.16\*(C'\fR. It is part of the default
+feature set and can be turned on or off explicitly with \f(CWuse feature
+\&\*(Aqarray_base\*(Aq\fR.
+.ie n .SS """_\|_SUB_\|_"""
+.el .SS \f(CW_\|_SUB_\|_\fP
+.IX Subsection "__SUB__"
+The new \f(CW\*(C`_\|_SUB_\|_\*(C'\fR token, available under the \f(CW\*(C`current_sub\*(C'\fR feature
+(see feature) or \f(CW\*(C`use v5.16\*(C'\fR, returns a reference to the current
+subroutine, making it easier to write recursive closures.
+.SS "New and Improved Built-ins"
+.IX Subsection "New and Improved Built-ins"
+\fIMore consistent \fR\f(CI\*(C`eval\*(C'\fR
+.IX Subsection "More consistent eval"
+.PP
+The \f(CW\*(C`eval\*(C'\fR operator sometimes treats a string argument as a sequence of
+characters and sometimes as a sequence of bytes, depending on the
+internal encoding. The internal encoding is not supposed to make any
+difference, but there is code that relies on this inconsistency.
+.PP
+The new \f(CW\*(C`unicode_eval\*(C'\fR and \f(CW\*(C`evalbytes\*(C'\fR features (enabled under \f(CWuse
+5.16.0\fR) resolve this. The \f(CW\*(C`unicode_eval\*(C'\fR feature causes \f(CWeval
+$string\fR to treat the string always as Unicode. The \f(CW\*(C`evalbytes\*(C'\fR
+features provides a function, itself called \f(CW\*(C`evalbytes\*(C'\fR, which
+evaluates its argument always as a string of bytes.
+.PP
+These features also fix oddities with source filters leaking to outer
+dynamic scopes.
+.PP
+See feature for more detail.
+.PP
+\fR\f(CI\*(C`substr\*(C'\fR\fI lvalue revamp\fR
+.IX Subsection "substr lvalue revamp"
+.PP
+When \f(CW\*(C`substr\*(C'\fR is called in lvalue or potential lvalue context with two
+or three arguments, a special lvalue scalar is returned that modifies
+the original string (the first argument) when assigned to.
+.PP
+Previously, the offsets (the second and third arguments) passed to
+\&\f(CW\*(C`substr\*(C'\fR would be converted immediately to match the string, negative
+offsets being translated to positive and offsets beyond the end of the
+string being truncated.
+.PP
+Now, the offsets are recorded without modification in the special
+lvalue scalar that is returned, and the original string is not even
+looked at by \f(CW\*(C`substr\*(C'\fR itself, but only when the returned lvalue is
+read or modified.
+.PP
+These changes result in an incompatible change:
+.PP
+If the original string changes length after the call to \f(CW\*(C`substr\*(C'\fR but
+before assignment to its return value, negative offsets will remember
+their position from the end of the string, affecting code like this:
+.PP
+.Vb 5
+\& my $string = "string";
+\& my $lvalue = \esubstr $string, \-4, 2;
+\& print $$lvalue, "\en"; # prints "ri"
+\& $string = "bailing twine";
+\& print $$lvalue, "\en"; # prints "wi"; used to print "il"
+.Ve
+.PP
+The same thing happens with an omitted third argument. The returned
+lvalue will always extend to the end of the string, even if the string
+becomes longer.
+.PP
+Since this change also allowed many bugs to be fixed (see
+"The \f(CW\*(C`substr\*(C'\fR operator"), and since the behavior
+of negative offsets has never been specified, the
+change was deemed acceptable.
+.PP
+\fIReturn value of \fR\f(CI\*(C`tied\*(C'\fR
+.IX Subsection "Return value of tied"
+.PP
+The value returned by \f(CW\*(C`tied\*(C'\fR on a tied variable is now the actual
+scalar that holds the object to which the variable is tied. This
+lets ties be weakened with \f(CW\*(C`Scalar::Util::weaken(tied
+$tied_variable)\*(C'\fR.
+.SS "Unicode Support"
+.IX Subsection "Unicode Support"
+\fISupports (almost) Unicode 6.1\fR
+.IX Subsection "Supports (almost) Unicode 6.1"
+.PP
+Besides the addition of whole new scripts, and new characters in
+existing scripts, this new version of Unicode, as always, makes some
+changes to existing characters. One change that may trip up some
+applications is that the General Category of two characters in the
+Latin\-1 range, PILCROW SIGN and SECTION SIGN, has been changed from
+Other_Symbol to Other_Punctuation. The same change has been made for
+a character in each of Tibetan, Ethiopic, and Aegean.
+The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE
+through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General
+Category changed from Other_Symbol to Other_Numeric. The Line Break
+property has changes for Hebrew and Japanese; and because of
+other changes in 6.1, the Perl regular expression construct \f(CW\*(C`\eX\*(C'\fR now
+works differently for some characters in Thai and Lao.
+.PP
+New aliases (synonyms) have been defined for many property values;
+these, along with the previously existing ones, are all cross-indexed in
+perluniprops.
+.PP
+The return value of \f(CWcharnames::viacode()\fR is affected by other
+changes:
+.PP
+.Vb 10
+\& Code point Old Name New Name
+\& U+000A LINE FEED (LF) LINE FEED
+\& U+000C FORM FEED (FF) FORM FEED
+\& U+000D CARRIAGE RETURN (CR) CARRIAGE RETURN
+\& U+0085 NEXT LINE (NEL) NEXT LINE
+\& U+008E SINGLE\-SHIFT 2 SINGLE\-SHIFT\-2
+\& U+008F SINGLE\-SHIFT 3 SINGLE\-SHIFT\-3
+\& U+0091 PRIVATE USE 1 PRIVATE USE\-1
+\& U+0092 PRIVATE USE 2 PRIVATE USE\-2
+\& U+2118 SCRIPT CAPITAL P WEIERSTRASS ELLIPTIC FUNCTION
+.Ve
+.PP
+Perl will accept any of these names as input, but
+\&\f(CWcharnames::viacode()\fR now returns the new name of each pair. The
+change for U+2118 is considered by Unicode to be a correction, that is
+the original name was a mistake (but again, it will remain forever valid
+to use it to refer to U+2118). But most of these changes are the
+fallout of the mistake Unicode 6.0 made in naming a character used in
+Japanese cell phones to be "BELL", which conflicts with the longstanding
+industry use of (and Unicode's recommendation to use) that name
+to mean the ASCII control character at U+0007. Therefore, that name
+has been deprecated in Perl since v5.14, and any use of it will raise a
+warning message (unless turned off). The name "ALERT" is now the
+preferred name for this code point, with "BEL" an acceptable short
+form. The name for the new cell phone character, at code point U+1F514,
+remains undefined in this version of Perl (hence we don't
+implement quite all of Unicode 6.1), but starting in v5.18, BELL will mean
+this character, and not U+0007.
+.PP
+Unicode has taken steps to make sure that this sort of mistake does not
+happen again. The Standard now includes all generally accepted
+names and abbreviations for control characters, whereas previously it
+didn't (though there were recommended names for most of them, which Perl
+used). This means that most of those recommended names are now
+officially in the Standard. Unicode did not recommend names for the
+four code points listed above between U+008E and U+008F, and in
+standardizing them Unicode subtly changed the names that Perl had
+previously given them, by replacing the final blank in each name by a
+hyphen. Unicode also officially accepts names that Perl had deprecated,
+such as FILE SEPARATOR. Now the only deprecated name is BELL.
+Finally, Perl now uses the new official names instead of the old
+(now considered obsolete) names for the first four code points in the
+list above (the ones which have the parentheses in them).
+.PP
+Now that the names have been placed in the Unicode standard, these kinds
+of changes should not happen again, though corrections, such as to
+U+2118, are still possible.
+.PP
+Unicode also added some name abbreviations, which Perl now accepts:
+SP for SPACE;
+TAB for CHARACTER TABULATION;
+NEW LINE, END OF LINE, NL, and EOL for LINE FEED;
+LOCKING-SHIFT ONE for SHIFT OUT;
+LOCKING-SHIFT ZERO for SHIFT IN;
+and ZWNBSP for ZERO WIDTH NO-BREAK SPACE.
+.PP
+More details on this version of Unicode are provided in
+<http://www.unicode.org/versions/Unicode6.1.0/>.
+.PP
+\fR\f(CI\*(C`use charnames\*(C'\fR\fI is no longer needed for \fR\f(CI\*(C`\eN{name}\*(C'\fR\fI\fR
+.IX Subsection "use charnames is no longer needed for N{name}"
+.PP
+When \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR is encountered, the \f(CW\*(C`charnames\*(C'\fR module is now
+automatically loaded when needed as if the \f(CW\*(C`:full\*(C'\fR and \f(CW\*(C`:short\*(C'\fR
+options had been specified. See charnames for more information.
+.PP
+\fR\f(CI\*(C`\eN{...}\*(C'\fR\fI can now have Unicode loose name matching\fR
+.IX Subsection "N{...} can now have Unicode loose name matching"
+.PP
+This is described in the \f(CW\*(C`charnames\*(C'\fR item in
+"Updated Modules and Pragmata" below.
+.PP
+\fIUnicode Symbol Names\fR
+.IX Subsection "Unicode Symbol Names"
+.PP
+Perl now has proper support for Unicode in symbol names. It used to be
+that \f(CW\*(C`*{$foo}\*(C'\fR would ignore the internal UTF8 flag and use the bytes of
+the underlying representation to look up the symbol. That meant that
+\&\f(CW\*(C`*{"\ex{100}"}\*(C'\fR and \f(CW\*(C`*{"\exc4\ex80"}\*(C'\fR would return the same thing. All
+these parts of Perl have been fixed to account for Unicode:
+.IP \(bu 4
+Method names (including those passed to \f(CW\*(C`use overload\*(C'\fR)
+.IP \(bu 4
+Typeglob names (including names of variables, subroutines, and filehandles)
+.IP \(bu 4
+Package names
+.IP \(bu 4
+\&\f(CW\*(C`goto\*(C'\fR
+.IP \(bu 4
+Symbolic dereferencing
+.IP \(bu 4
+Second argument to \f(CWbless()\fR and \f(CWtie()\fR
+.IP \(bu 4
+Return value of \f(CWref()\fR
+.IP \(bu 4
+Subroutine prototypes
+.IP \(bu 4
+Attributes
+.IP \(bu 4
+Various warnings and error messages that mention variable names or values,
+methods, etc.
+.PP
+In addition, a parsing bug has been fixed that prevented \f(CW\*(C`*{é}\*(C'\fR from
+implicitly quoting the name, but instead interpreted it as \f(CW\*(C`*{+é}\*(C'\fR, which
+would cause a strict violation.
+.PP
+\&\f(CW\*(C`*{"*a::b"}\*(C'\fR automatically strips off the * if it is followed by an ASCII
+letter. That has been extended to all Unicode identifier characters.
+.PP
+One-character non-ASCII non-punctuation variables (like \f(CW$é\fR) are now
+subject to "Used only once" warnings. They used to be exempt, as they
+were treated as punctuation variables.
+.PP
+Also, single-character Unicode punctuation variables (like \f(CW$‰\fR) are now
+supported [perl #69032].
+.PP
+\fIImproved ability to mix locales and Unicode, including UTF\-8 locales\fR
+.IX Subsection "Improved ability to mix locales and Unicode, including UTF-8 locales"
+.PP
+An optional parameter has been added to \f(CW\*(C`use locale\*(C'\fR
+.PP
+.Vb 1
+\& use locale \*(Aq:not_characters\*(Aq;
+.Ve
+.PP
+which tells Perl to use all but the \f(CW\*(C`LC_CTYPE\*(C'\fR and \f(CW\*(C`LC_COLLATE\*(C'\fR
+portions of the current locale. Instead, the character set is assumed
+to be Unicode. This lets locales and Unicode be seamlessly mixed,
+including the increasingly frequent UTF\-8 locales. When using this
+hybrid form of locales, the \f(CW\*(C`:locale\*(C'\fR layer to the open pragma can
+be used to interface with the file system, and there are CPAN modules
+available for ARGV and environment variable conversions.
+.PP
+Full details are in perllocale.
+.PP
+\fINew function \fR\f(CI\*(C`fc\*(C'\fR\fI and corresponding escape sequence \fR\f(CI\*(C`\eF\*(C'\fR\fI for Unicode foldcase\fR
+.IX Subsection "New function fc and corresponding escape sequence F for Unicode foldcase"
+.PP
+Unicode foldcase is an extension to lowercase that gives better results
+when comparing two strings case-insensitively. It has long been used
+internally in regular expression \f(CW\*(C`/i\*(C'\fR matching. Now it is available
+explicitly through the new \f(CW\*(C`fc\*(C'\fR function call (enabled by
+\&\f(CW"use\ feature\ \*(Aqfc\*(Aq"\fR, or \f(CW\*(C`use v5.16\*(C'\fR, or explicitly callable via
+\&\f(CW\*(C`CORE::fc\*(C'\fR) or through the new \f(CW\*(C`\eF\*(C'\fR sequence in double-quotish
+strings.
+.PP
+Full details are in "fc" in perlfunc.
+.PP
+\fIThe Unicode \fR\f(CI\*(C`Script_Extensions\*(C'\fR\fI property is now supported.\fR
+.IX Subsection "The Unicode Script_Extensions property is now supported."
+.PP
+New in Unicode 6.0, this is an improved \f(CW\*(C`Script\*(C'\fR property. Details
+are in "Scripts" in perlunicode.
+.SS "XS Changes"
+.IX Subsection "XS Changes"
+\fIImproved typemaps for Some Builtin Types\fR
+.IX Subsection "Improved typemaps for Some Builtin Types"
+.PP
+Most XS authors will know there is a longstanding bug in the
+OUTPUT typemap for T_AVREF (\f(CW\*(C`AV*\*(C'\fR), T_HVREF (\f(CW\*(C`HV*\*(C'\fR), T_CVREF (\f(CW\*(C`CV*\*(C'\fR),
+and T_SVREF (\f(CW\*(C`SVREF\*(C'\fR or \f(CW\*(C`\e$foo\*(C'\fR) that requires manually decrementing
+the reference count of the return value instead of the typemap taking
+care of this. For backwards-compatibility, this cannot be changed in the
+default typemaps. But we now provide additional typemaps
+\&\f(CW\*(C`T_AVREF_REFCOUNT_FIXED\*(C'\fR, etc. that do not exhibit this bug. Using
+them in your extension is as simple as having one line in your
+\&\f(CW\*(C`TYPEMAP\*(C'\fR section:
+.PP
+.Vb 1
+\& HV* T_HVREF_REFCOUNT_FIXED
+.Ve
+.PP
+\fR\f(CIis_utf8_char()\fR\fI\fR
+.IX Subsection "is_utf8_char()"
+.PP
+The XS-callable function \f(CWis_utf8_char()\fR, when presented with
+malformed UTF\-8 input, can read up to 12 bytes beyond the end of the
+string. This cannot be fixed without changing its API, and so its
+use is now deprecated. Use \f(CWis_utf8_char_buf()\fR (described just below)
+instead.
+.PP
+\fIAdded \fR\f(CIis_utf8_char_buf()\fR
+.IX Subsection "Added is_utf8_char_buf()"
+.PP
+This function is designed to replace the deprecated "\fBis_utf8_char()\fR"
+function. It includes an extra parameter to make sure it doesn't read
+past the end of the input buffer.
+.PP
+\fIOther \fR\f(CIis_utf8_foo()\fR\fI functions, as well as \fR\f(CIutf8_to_foo()\fR\fI, etc.\fR
+.IX Subsection "Other is_utf8_foo() functions, as well as utf8_to_foo(), etc."
+.PP
+Most other XS-callable functions that take UTF\-8 encoded input
+implicitly assume that the UTF\-8 is valid (not malformed) with respect to
+buffer length. Do not do things such as change a character's case or
+see if it is alphanumeric without first being sure that it is valid
+UTF\-8. This can be safely done for a whole string by using one of the
+functions \f(CWis_utf8_string()\fR, \f(CWis_utf8_string_loc()\fR, and
+\&\f(CWis_utf8_string_loclen()\fR.
+.PP
+\fINew Pad API\fR
+.IX Subsection "New Pad API"
+.PP
+Many new functions have been added to the API for manipulating lexical
+pads. See "Pad Data Structures" in perlapi for more information.
+.SS "Changes to Special Variables"
+.IX Subsection "Changes to Special Variables"
+\fR\f(CI$$\fR\fI can be assigned to\fR
+.IX Subsection "$$ can be assigned to"
+.PP
+\&\f(CW$$\fR was made read-only in Perl 5.8.0. But only sometimes: \f(CW\*(C`local $$\*(C'\fR
+would make it writable again. Some CPAN modules were using \f(CW\*(C`local $$\*(C'\fR or
+XS code to bypass the read-only check, so there is no reason to keep \f(CW$$\fR
+read-only. (This change also allowed a bug to be fixed while maintaining
+backward compatibility.)
+.PP
+\fR\f(CI$^X\fR\fI converted to an absolute path on FreeBSD, OS X and Solaris\fR
+.IX Subsection "$^X converted to an absolute path on FreeBSD, OS X and Solaris"
+.PP
+\&\f(CW$^X\fR is now converted to an absolute path on OS X, FreeBSD (without
+needing \fI/proc\fR mounted) and Solaris 10 and 11. This augments the
+previous approach of using \fI/proc\fR on Linux, FreeBSD, and NetBSD
+(in all cases, where mounted).
+.PP
+This makes relocatable perl installations more useful on these platforms.
+(See "Relocatable \f(CW@INC\fR" in \fIINSTALL\fR)
+.SS "Debugger Changes"
+.IX Subsection "Debugger Changes"
+\fIFeatures inside the debugger\fR
+.IX Subsection "Features inside the debugger"
+.PP
+The current Perl's feature bundle is now enabled for commands entered
+in the interactive debugger.
+.PP
+\fINew option for the debugger's \fR\f(BIt\fR\fI command\fR
+.IX Subsection "New option for the debugger's t command"
+.PP
+The \fBt\fR command in the debugger, which toggles tracing mode, now
+accepts a numeric argument that determines how many levels of subroutine
+calls to trace.
+.PP
+\fR\f(CI\*(C`enable\*(C'\fR\fI and \fR\f(CI\*(C`disable\*(C'\fR\fI\fR
+.IX Subsection "enable and disable"
+.PP
+The debugger now has \f(CW\*(C`disable\*(C'\fR and \f(CW\*(C`enable\*(C'\fR commands for disabling
+existing breakpoints and re-enabling them. See perldebug.
+.PP
+\fIBreakpoints with file names\fR
+.IX Subsection "Breakpoints with file names"
+.PP
+The debugger's "b" command for setting breakpoints now lets a line
+number be prefixed with a file name. See
+"b [file]:[line] [condition]" in perldebug.
+.ie n .SS "The ""CORE"" Namespace"
+.el .SS "The \f(CWCORE\fP Namespace"
+.IX Subsection "The CORE Namespace"
+\fIThe \fR\f(CI\*(C`CORE::\*(C'\fR\fI prefix\fR
+.IX Subsection "The CORE:: prefix"
+.PP
+The \f(CW\*(C`CORE::\*(C'\fR prefix can now be used on keywords enabled by
+feature.pm, even outside the scope of \f(CW\*(C`use feature\*(C'\fR.
+.PP
+\fISubroutines in the \fR\f(CI\*(C`CORE\*(C'\fR\fI namespace\fR
+.IX Subsection "Subroutines in the CORE namespace"
+.PP
+Many Perl keywords are now available as subroutines in the CORE namespace.
+This lets them be aliased:
+.PP
+.Vb 2
+\& BEGIN { *entangle = \e&CORE::tie }
+\& entangle $variable, $package, @args;
+.Ve
+.PP
+And for prototypes to be bypassed:
+.PP
+.Vb 5
+\& sub mytie(\e[%$*@]$@) {
+\& my ($ref, $pack, @args) = @_;
+\& ... do something ...
+\& goto &CORE::tie;
+\& }
+.Ve
+.PP
+Some of these cannot be called through references or via \f(CW&foo\fR syntax,
+but must be called as barewords.
+.PP
+See CORE for details.
+.SS "Other Changes"
+.IX Subsection "Other Changes"
+\fIAnonymous handles\fR
+.IX Subsection "Anonymous handles"
+.PP
+Automatically generated file handles are now named _\|_ANONIO_\|_ when the
+variable name cannot be determined, rather than \f(CW$_\fR\|_ANONIO_\|_.
+.PP
+\fIAutoloaded sort Subroutines\fR
+.IX Subsection "Autoloaded sort Subroutines"
+.PP
+Custom sort subroutines can now be autoloaded [perl #30661]:
+.PP
+.Vb 2
+\& sub AUTOLOAD { ... }
+\& @sorted = sort foo @list; # uses AUTOLOAD
+.Ve
+.PP
+\fR\f(CI\*(C`continue\*(C'\fR\fI no longer requires the "switch" feature\fR
+.IX Subsection "continue no longer requires the ""switch"" feature"
+.PP
+The \f(CW\*(C`continue\*(C'\fR keyword has two meanings. It can introduce a \f(CW\*(C`continue\*(C'\fR
+block after a loop, or it can exit the current \f(CW\*(C`when\*(C'\fR block. Up to now,
+the latter meaning was valid only with the "switch" feature enabled, and
+was a syntax error otherwise. Since the main purpose of feature.pm is to
+avoid conflicts with user-defined subroutines, there is no reason for
+\&\f(CW\*(C`continue\*(C'\fR to depend on it.
+.PP
+\fIDTrace probes for interpreter phase change\fR
+.IX Subsection "DTrace probes for interpreter phase change"
+.PP
+The \f(CW\*(C`phase\-change\*(C'\fR probes will fire when the interpreter's phase
+changes, which tracks the \f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR variable. \f(CW\*(C`arg0\*(C'\fR is
+the new phase name; \f(CW\*(C`arg1\*(C'\fR is the old one. This is useful
+for limiting your instrumentation to one or more of: compile time,
+run time, or destruct time.
+.PP
+\fR\f(CI\*(C`_\|_FILE_\|_()\*(C'\fR\fI Syntax\fR
+.IX Subsection "__FILE__() Syntax"
+.PP
+The \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, \f(CW\*(C`_\|_LINE_\|_\*(C'\fR and \f(CW\*(C`_\|_PACKAGE_\|_\*(C'\fR tokens can now be written
+with an empty pair of parentheses after them. This makes them parse the
+same way as \f(CW\*(C`time\*(C'\fR, \f(CW\*(C`fork\*(C'\fR and other built-in functions.
+.PP
+\fIThe \fR\f(CI\*(C`\e$\*(C'\fR\fI prototype accepts any scalar lvalue\fR
+.IX Subsection "The $ prototype accepts any scalar lvalue"
+.PP
+The \f(CW\*(C`\e$\*(C'\fR and \f(CW\*(C`\e[$]\*(C'\fR subroutine prototypes now accept any scalar lvalue
+argument. Previously they accepted only scalars beginning with \f(CW\*(C`$\*(C'\fR and
+hash and array elements. This change makes them consistent with the way
+the built-in \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`recv\*(C'\fR functions (among others) parse their
+arguments. This means that one can override the built-in functions with
+custom subroutines that parse their arguments the same way.
+.PP
+\fR\f(CI\*(C`_\*(C'\fR\fI in subroutine prototypes\fR
+.IX Subsection "_ in subroutine prototypes"
+.PP
+The \f(CW\*(C`_\*(C'\fR character in subroutine prototypes is now allowed before \f(CW\*(C`@\*(C'\fR or
+\&\f(CW\*(C`%\*(C'\fR.
+.SH Security
+.IX Header "Security"
+.ie n .SS "Use is_utf8_char_buf() and not is_utf8_char()"
+.el .SS "Use \f(CWis_utf8_char_buf()\fP and not \f(CWis_utf8_char()\fP"
+.IX Subsection "Use is_utf8_char_buf() and not is_utf8_char()"
+The latter function is now deprecated because its API is insufficient to
+guarantee that it doesn't read (up to 12 bytes in the worst case) beyond
+the end of its input string. See
+\&\fBis_utf8_char_buf()\fR.
+.SS "Malformed UTF\-8 input could cause attempts to read beyond the end of the buffer"
+.IX Subsection "Malformed UTF-8 input could cause attempts to read beyond the end of the buffer"
+Two new XS-accessible functions, \f(CWutf8_to_uvchr_buf()\fR and
+\&\f(CWutf8_to_uvuni_buf()\fR are now available to prevent this, and the Perl
+core has been converted to use them.
+See "Internal Changes".
+.ie n .SS "File::Glob::bsd_glob() memory error with GLOB_ALTDIRFUNC (CVE\-2011\-2728)."
+.el .SS "\f(CWFile::Glob::bsd_glob()\fP memory error with GLOB_ALTDIRFUNC (CVE\-2011\-2728)."
+.IX Subsection "File::Glob::bsd_glob() memory error with GLOB_ALTDIRFUNC (CVE-2011-2728)."
+Calling \f(CW\*(C`File::Glob::bsd_glob\*(C'\fR with the unsupported flag
+GLOB_ALTDIRFUNC would cause an access violation / segfault. A Perl
+program that accepts a flags value from an external source could expose
+itself to denial of service or arbitrary code execution attacks. There
+are no known exploits in the wild. The problem has been corrected by
+explicitly disabling all unsupported flags and setting unused function
+pointers to null. Bug reported by Clément Lecigne. (5.14.2)
+.ie n .SS "Privileges are now set correctly when assigning to $("
+.el .SS "Privileges are now set correctly when assigning to \f(CW$(\fP"
+.IX Subsection "Privileges are now set correctly when assigning to $("
+A hypothetical bug (probably unexploitable in practice) because the
+incorrect setting of the effective group ID while setting \f(CW$(\fR has been
+fixed. The bug would have affected only systems that have \f(CWsetresgid()\fR
+but not \f(CWsetregid()\fR, but no such systems are known to exist.
+.SH Deprecations
+.IX Header "Deprecations"
+.SS "Don't read the Unicode data base files in \fIlib/unicore\fP"
+.IX Subsection "Don't read the Unicode data base files in lib/unicore"
+It is now deprecated to directly read the Unicode data base files.
+These are stored in the \fIlib/unicore\fR directory. Instead, you should
+use the new functions in Unicode::UCD. These provide a stable API,
+and give complete information.
+.PP
+Perl may at some point in the future change or remove these files. The
+file which applications were most likely to have used is
+\&\fIlib/unicore/ToDigit.pl\fR. "\fBprop_invmap()\fR" in Unicode::UCD can be used to
+get at its data instead.
+.ie n .SS "XS functions is_utf8_char(), utf8_to_uvchr() and utf8_to_uvuni()"
+.el .SS "XS functions \f(CWis_utf8_char()\fP, \f(CWutf8_to_uvchr()\fP and \f(CWutf8_to_uvuni()\fP"
+.IX Subsection "XS functions is_utf8_char(), utf8_to_uvchr() and utf8_to_uvuni()"
+This function is deprecated because it could read beyond the end of the
+input string. Use the new \fBis_utf8_char_buf()\fR,
+\&\f(CWutf8_to_uvchr_buf()\fR and \f(CWutf8_to_uvuni_buf()\fR instead.
+.SH "Future Deprecations"
+.IX Header "Future Deprecations"
+This section serves as a notice of features that are \fIlikely\fR to be
+removed or deprecated in the next release of
+perl (5.18.0). If your code depends on these features, you should
+contact the Perl 5 Porters via the mailing
+list <http://lists.perl.org/list/perl5-porters.html> or perlbug to
+explain your use case and inform the deprecation process.
+.SS "Core Modules"
+.IX Subsection "Core Modules"
+These modules may be marked as deprecated \fIfrom the core\fR. This only
+means that they will no longer be installed by default with the core
+distribution, but will remain available on the CPAN.
+.IP \(bu 4
+CPANPLUS
+.IP \(bu 4
+Filter::Simple
+.IP \(bu 4
+PerlIO::mmap
+.IP \(bu 4
+Pod::LaTeX
+.IP \(bu 4
+Pod::Parser
+.IP \(bu 4
+SelfLoader
+.IP \(bu 4
+Text::Soundex
+.IP \(bu 4
+Thread.pm
+.SS "Platforms with no supporting programmers"
+.IX Subsection "Platforms with no supporting programmers"
+These platforms will probably have their
+special build support removed during the
+5.17.0 development series.
+.IP \(bu 4
+BeOS
+.IP \(bu 4
+djgpp
+.IP \(bu 4
+dgux
+.IP \(bu 4
+EPOC
+.IP \(bu 4
+MPE/iX
+.IP \(bu 4
+Rhapsody
+.IP \(bu 4
+UTS
+.IP \(bu 4
+VM/ESA
+.SS "Other Future Deprecations"
+.IX Subsection "Other Future Deprecations"
+.IP \(bu 4
+Swapping of $< and $>
+.Sp
+For more information about this future deprecation, see the relevant RT
+ticket <https://github.com/Perl/perl5/issues/11547>.
+.IP \(bu 4
+sfio, stdio
+.Sp
+Perl supports being built without PerlIO proper, using a stdio or sfio
+wrapper instead. A perl build like this will not support IO layers and
+thus Unicode IO, making it rather handicapped.
+.Sp
+PerlIO supports a \f(CW\*(C`stdio\*(C'\fR layer if stdio use is desired, and similarly a
+sfio layer could be produced.
+.IP \(bu 4
+Unescaped literal \f(CW"{"\fR in regular expressions.
+.Sp
+Starting with v5.20, it is planned to require a literal \f(CW"{"\fR to be
+escaped, for example by preceding it with a backslash. In v5.18, a
+deprecated warning message will be emitted for all such uses.
+This affects only patterns that are to match a literal \f(CW"{"\fR. Other
+uses of this character, such as part of a quantifier or sequence as in
+those below, are completely unaffected:
+.Sp
+.Vb 3
+\& /foo{3,5}/
+\& /\ep{Alphabetic}/
+\& /\eN{DIGIT ZERO}
+.Ve
+.Sp
+Removing this will permit extensions to Perl's pattern syntax and better
+error checking for existing syntax. See "Quantifiers" in perlre for an
+example.
+.IP \(bu 4
+Revamping \f(CW"\eQ"\fR semantics in double-quotish strings when combined with other escapes.
+.Sp
+There are several bugs and inconsistencies involving combinations
+of \f(CW\*(C`\eQ\*(C'\fR and escapes like \f(CW\*(C`\ex\*(C'\fR, \f(CW\*(C`\eL\*(C'\fR, etc., within a \f(CW\*(C`\eQ...\eE\*(C'\fR pair.
+These need to be fixed, and doing so will necessarily change current
+behavior. The changes have not yet been settled.
+.SH "Incompatible Changes"
+.IX Header "Incompatible Changes"
+.SS "Special blocks called in void context"
+.IX Subsection "Special blocks called in void context"
+Special blocks (\f(CW\*(C`BEGIN\*(C'\fR, \f(CW\*(C`CHECK\*(C'\fR, \f(CW\*(C`INIT\*(C'\fR, \f(CW\*(C`UNITCHECK\*(C'\fR, \f(CW\*(C`END\*(C'\fR) are now
+called in void context. This avoids wasteful copying of the result of the
+last statement [perl #108794].
+.ie n .SS "The ""overloading"" pragma and regexp objects"
+.el .SS "The \f(CWoverloading\fP pragma and regexp objects"
+.IX Subsection "The overloading pragma and regexp objects"
+With \f(CW\*(C`no overloading\*(C'\fR, regular expression objects returned by \f(CW\*(C`qr//\*(C'\fR are
+now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
+expression itself [perl #108780].
+.SS "Two XS typemap Entries removed"
+.IX Subsection "Two XS typemap Entries removed"
+Two presumably unused XS typemap entries have been removed from the
+core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds,
+a user of these, please see the instructions on how to restore them
+in perlxstypemap.
+.SS "Unicode 6.1 has incompatibilities with Unicode 6.0"
+.IX Subsection "Unicode 6.1 has incompatibilities with Unicode 6.0"
+These are detailed in "Supports (almost) Unicode 6.1" above.
+You can compile this version of Perl to use Unicode 6.0. See
+"Hacking Perl to work on earlier Unicode versions (for very serious hackers only)" in perlunicode.
+.SS "Borland compiler"
+.IX Subsection "Borland compiler"
+All support for the Borland compiler has been dropped. The code had not
+worked for a long time anyway.
+.SS "Certain deprecated Unicode properties are no longer supported by default"
+.IX Subsection "Certain deprecated Unicode properties are no longer supported by default"
+Perl should never have exposed certain Unicode properties that are used
+by Unicode internally and not meant to be publicly available. Use of
+these has generated deprecated warning messages since Perl 5.12. The
+removed properties are Other_Alphabetic,
+Other_Default_Ignorable_Code_Point, Other_Grapheme_Extend,
+Other_ID_Continue, Other_ID_Start, Other_Lowercase, Other_Math, and
+Other_Uppercase.
+.PP
+Perl may be recompiled to include any or all of them; instructions are
+given in
+"Unicode character properties that are NOT accepted by Perl" in perluniprops.
+.SS "Dereferencing IO thingies as typeglobs"
+.IX Subsection "Dereferencing IO thingies as typeglobs"
+The \f(CW\*(C`*{...}\*(C'\fR operator, when passed a reference to an IO thingy (as in
+\&\f(CW\*(C`*{*STDIN{IO}}\*(C'\fR), creates a new typeglob containing just that IO object.
+Previously, it would stringify as an empty string, but some operators would
+treat it as undefined, producing an "uninitialized" warning.
+Now it stringifies as _\|_ANONIO_\|_ [perl #96326].
+.SS "User-defined case-changing operations"
+.IX Subsection "User-defined case-changing operations"
+This feature was deprecated in Perl 5.14, and has now been removed.
+The CPAN module Unicode::Casing provides better functionality without
+the drawbacks that this feature had, as are detailed in the 5.14
+documentation:
+<http://perldoc.perl.org/5.14.0/perlunicode.html#User\-Defined\-Case\-Mappings\-%28for\-serious\-hackers\-only%29>
+.SS "XSUBs are now 'static'"
+.IX Subsection "XSUBs are now 'static'"
+XSUB C functions are now 'static', that is, they are not visible from
+outside the compilation unit. Users can use the new \f(CWXS_EXTERNAL(name)\fR
+and \f(CWXS_INTERNAL(name)\fR macros to pick the desired linking behavior.
+The ordinary \f(CWXS(name)\fR declaration for XSUBs will continue to declare
+non\-'static' XSUBs for compatibility, but the XS compiler,
+ExtUtils::ParseXS (\f(CW\*(C`xsubpp\*(C'\fR) will emit 'static' XSUBs by default.
+ExtUtils::ParseXS's behavior can be reconfigured from XS using the
+\&\f(CW\*(C`EXPORT_XSUB_SYMBOLS\*(C'\fR keyword. See perlxs for details.
+.SS "Weakening read-only references"
+.IX Subsection "Weakening read-only references"
+Weakening read-only references is no longer permitted. It should never
+have worked anyway, and could sometimes result in crashes.
+.SS "Tying scalars that hold typeglobs"
+.IX Subsection "Tying scalars that hold typeglobs"
+Attempting to tie a scalar after a typeglob was assigned to it would
+instead tie the handle in the typeglob's IO slot. This meant that it was
+impossible to tie the scalar itself. Similar problems affected \f(CW\*(C`tied\*(C'\fR and
+\&\f(CW\*(C`untie\*(C'\fR: \f(CW\*(C`tied $scalar\*(C'\fR would return false on a tied scalar if the last
+thing returned was a typeglob, and \f(CW\*(C`untie $scalar\*(C'\fR on such a tied scalar
+would do nothing.
+.PP
+We fixed this problem before Perl 5.14.0, but it caused problems with some
+CPAN modules, so we put in a deprecation cycle instead.
+.PP
+Now the deprecation has been removed and this bug has been fixed. So
+\&\f(CW\*(C`tie $scalar\*(C'\fR will always tie the scalar, not the handle it holds. To tie
+the handle, use \f(CW\*(C`tie *$scalar\*(C'\fR (with an explicit asterisk). The same
+applies to \f(CW\*(C`tied *$scalar\*(C'\fR and \f(CW\*(C`untie *$scalar\*(C'\fR.
+.ie n .SS "IPC::Open3 no longer provides xfork(), xclose_on_exec() and xpipe_anon()"
+.el .SS "IPC::Open3 no longer provides \f(CWxfork()\fP, \f(CWxclose_on_exec()\fP and \f(CWxpipe_anon()\fP"
+.IX Subsection "IPC::Open3 no longer provides xfork(), xclose_on_exec() and xpipe_anon()"
+All three functions were private, undocumented, and unexported. They do
+not appear to be used by any code on CPAN. Two have been inlined and one
+deleted entirely.
+.ie n .SS "$$ no longer caches PID"
+.el .SS "\f(CW$$\fP no longer caches PID"
+.IX Subsection "$$ no longer caches PID"
+Previously, if one called \fBfork\fR\|(3) from C, Perl's
+notion of \f(CW$$\fR could go out of sync with what \fBgetpid()\fR returns. By always
+fetching the value of \f(CW$$\fR via \fBgetpid()\fR, this potential bug is eliminated.
+Code that depends on the caching behavior will break. As described in
+Core Enhancements,
+\&\f(CW$$\fR is now writable, but it will be reset during a
+fork.
+.ie n .SS "$$ and getppid() no longer emulate POSIX semantics under LinuxThreads"
+.el .SS "\f(CW$$\fP and \f(CWgetppid()\fP no longer emulate POSIX semantics under LinuxThreads"
+.IX Subsection "$$ and getppid() no longer emulate POSIX semantics under LinuxThreads"
+The POSIX emulation of \f(CW$$\fR and \f(CWgetppid()\fR under the obsolete
+LinuxThreads implementation has been removed.
+This only impacts users of Linux 2.4 and
+users of Debian GNU/kFreeBSD up to and including 6.0, not the vast
+majority of Linux installations that use NPTL threads.
+.PP
+This means that \f(CWgetppid()\fR, like \f(CW$$\fR, is now always guaranteed to
+return the OS's idea of the current state of the process, not perl's
+cached version of it.
+.PP
+See the documentation for $$ for details.
+.ie n .SS "$<, $>, $( and $) are no longer cached"
+.el .SS "\f(CW$<\fP, \f(CW$>\fP, \f(CW$(\fP and \f(CW$)\fP are no longer cached"
+.IX Subsection "$<, $>, $( and $) are no longer cached"
+Similarly to the changes to \f(CW$$\fR and \f(CWgetppid()\fR, the internal
+caching of \f(CW$<\fR, \f(CW$>\fR, \f(CW$(\fR and \f(CW$)\fR has been removed.
+.PP
+When we cached these values our idea of what they were would drift out
+of sync with reality if someone (e.g., someone embedding perl) called
+\&\f(CW\*(C`sete?[ug]id()\*(C'\fR without updating \f(CW\*(C`PL_e?[ug]id\*(C'\fR. Having to deal with
+this complexity wasn't worth it given how cheap the \f(CW\*(C`gete?[ug]id()\*(C'\fR
+system call is.
+.PP
+This change will break a handful of CPAN modules that use the XS-level
+\&\f(CW\*(C`PL_uid\*(C'\fR, \f(CW\*(C`PL_gid\*(C'\fR, \f(CW\*(C`PL_euid\*(C'\fR or \f(CW\*(C`PL_egid\*(C'\fR variables.
+.PP
+The fix for those breakages is to use \f(CW\*(C`PerlProc_gete?[ug]id()\*(C'\fR to
+retrieve them (e.g., \f(CWPerlProc_getuid()\fR), and not to assign to
+\&\f(CW\*(C`PL_e?[ug]id\*(C'\fR if you change the UID/GID/EUID/EGID. There is no longer
+any need to do so since perl will always retrieve the up-to-date
+version of those values from the OS.
+.ie n .SS "Which Non-ASCII characters get quoted by ""quotemeta"" and ""\eQ"" has changed"
+.el .SS "Which Non-ASCII characters get quoted by \f(CWquotemeta\fP and \f(CW\eQ\fP has changed"
+.IX Subsection "Which Non-ASCII characters get quoted by quotemeta and Q has changed"
+This is unlikely to result in a real problem, as Perl does not attach
+special meaning to any non-ASCII character, so it is currently
+irrelevant which are quoted or not. This change fixes bug [perl #77654] and
+brings Perl's behavior more into line with Unicode's recommendations.
+See "quotemeta" in perlfunc.
+.SH "Performance Enhancements"
+.IX Header "Performance Enhancements"
+.IP \(bu 4
+Improved performance for Unicode properties in regular expressions
+.Sp
+Matching a code point against a Unicode property is now done via a
+binary search instead of linear. This means for example that the worst
+case for a 1000 item property is 10 probes instead of 1000. This
+inefficiency has been compensated for in the past by permanently storing
+in a hash the results of a given probe plus the results for the adjacent
+64 code points, under the theory that near-by code points are likely to
+be searched for. A separate hash was used for each mention of a Unicode
+property in each regular expression. Thus, \f(CW\*(C`qr/\ep{foo}abc\ep{foo}/\*(C'\fR
+would generate two hashes. Any probes in one instance would be unknown
+to the other, and the hashes could expand separately to be quite large
+if the regular expression were used on many different widely-separated
+code points.
+Now, however, there is just one hash shared by all instances of a given
+property. This means that if \f(CW\*(C`\ep{foo}\*(C'\fR is matched against "A" in one
+regular expression in a thread, the result will be known immediately to
+all regular expressions, and the relentless march of using up memory is
+slowed considerably.
+.IP \(bu 4
+Version declarations with the \f(CW\*(C`use\*(C'\fR keyword (e.g., \f(CW\*(C`use 5.012\*(C'\fR) are now
+faster, as they enable features without loading \fIfeature.pm\fR.
+.IP \(bu 4
+\&\f(CW\*(C`local $_\*(C'\fR is faster now, as it no longer iterates through magic that it
+is not going to copy anyway.
+.IP \(bu 4
+Perl 5.12.0 sped up the destruction of objects whose classes define
+empty \f(CW\*(C`DESTROY\*(C'\fR methods (to prevent autoloading), by simply not
+calling such empty methods. This release takes this optimization a
+step further, by not calling any \f(CW\*(C`DESTROY\*(C'\fR method that begins with a
+\&\f(CW\*(C`return\*(C'\fR statement. This can be useful for destructors that are only
+used for debugging:
+.Sp
+.Vb 2
+\& use constant DEBUG => 1;
+\& sub DESTROY { return unless DEBUG; ... }
+.Ve
+.Sp
+Constant-folding will reduce the first statement to \f(CW\*(C`return;\*(C'\fR if DEBUG
+is set to 0, triggering this optimization.
+.IP \(bu 4
+Assigning to a variable that holds a typeglob or copy-on-write scalar
+is now much faster. Previously the typeglob would be stringified or
+the copy-on-write scalar would be copied before being clobbered.
+.IP \(bu 4
+Assignment to \f(CW\*(C`substr\*(C'\fR in void context is now more than twice its
+previous speed. Instead of creating and returning a special lvalue
+scalar that is then assigned to, \f(CW\*(C`substr\*(C'\fR modifies the original string
+itself.
+.IP \(bu 4
+\&\f(CW\*(C`substr\*(C'\fR no longer calculates a value to return when called in void
+context.
+.IP \(bu 4
+Due to changes in File::Glob, Perl's \f(CW\*(C`glob\*(C'\fR function and its \f(CW\*(C`<...>\*(C'\fR equivalent are now much faster. The splitting of the pattern
+into words has been rewritten in C, resulting in speed-ups of 20% for
+some cases.
+.Sp
+This does not affect \f(CW\*(C`glob\*(C'\fR on VMS, as it does not use File::Glob.
+.IP \(bu 4
+The short-circuiting operators \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, and \f(CW\*(C`//\*(C'\fR, when chained
+(such as \f(CW\*(C`$a || $b || $c\*(C'\fR), are now considerably faster to short-circuit,
+due to reduced optree traversal.
+.IP \(bu 4
+The implementation of \f(CW\*(C`s///r\*(C'\fR makes one fewer copy of the scalar's value.
+.IP \(bu 4
+Recursive calls to lvalue subroutines in lvalue scalar context use less
+memory.
+.SH "Modules and Pragmata"
+.IX Header "Modules and Pragmata"
+.SS "Deprecated Modules"
+.IX Subsection "Deprecated Modules"
+.IP Version::Requirements 4
+.IX Item "Version::Requirements"
+Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements,
+which is a drop-in replacement. It will be deleted from perl.git blead
+in v5.17.0.
+.SS "New Modules and Pragmata"
+.IX Subsection "New Modules and Pragmata"
+.IP \(bu 4
+arybase \-\- this new module implements the \f(CW$[\fR variable.
+.IP \(bu 4
+PerlIO::mmap 0.010 has been added to the Perl core.
+.Sp
+The \f(CW\*(C`mmap\*(C'\fR PerlIO layer is no longer implemented by perl itself, but has
+been moved out into the new PerlIO::mmap module.
+.SS "Updated Modules and Pragmata"
+.IX Subsection "Updated Modules and Pragmata"
+This is only an overview of selected module updates. For a complete list of
+updates, run:
+.PP
+.Vb 1
+\& $ corelist \-\-diff 5.14.0 5.16.0
+.Ve
+.PP
+You can substitute your favorite version in place of 5.14.0, too.
+.IP \(bu 4
+Archive::Extract has been upgraded from version 0.48 to 0.58.
+.Sp
+Includes a fix for FreeBSD to only use \f(CW\*(C`unzip\*(C'\fR if it is located in
+\&\f(CW\*(C`/usr/local/bin\*(C'\fR, as FreeBSD 9.0 will ship with a limited \f(CW\*(C`unzip\*(C'\fR in
+\&\f(CW\*(C`/usr/bin\*(C'\fR.
+.IP \(bu 4
+Archive::Tar has been upgraded from version 1.76 to 1.82.
+.Sp
+Adjustments to handle files >8gb (>0777777777777 octal) and a feature
+to return the MD5SUM of files in the archive.
+.IP \(bu 4
+base has been upgraded from version 2.16 to 2.18.
+.Sp
+\&\f(CW\*(C`base\*(C'\fR no longer sets a module's \f(CW$VERSION\fR to "\-1" when a module it
+loads does not define a \f(CW$VERSION\fR. This change has been made because
+"\-1" is not a valid version number under the new "lax" criteria used
+internally by \f(CW\*(C`UNIVERSAL::VERSION\*(C'\fR. (See version for more on "lax"
+version criteria.)
+.Sp
+\&\f(CW\*(C`base\*(C'\fR no longer internally skips loading modules it has already loaded
+and instead relies on \f(CW\*(C`require\*(C'\fR to inspect \f(CW%INC\fR. This fixes a bug
+when \f(CW\*(C`base\*(C'\fR is used with code that clear \f(CW%INC\fR to force a module to
+be reloaded.
+.IP \(bu 4
+Carp has been upgraded from version 1.20 to 1.26.
+.Sp
+It now includes last read filehandle info and puts a dot after the file
+and line number, just like errors from \f(CW\*(C`die\*(C'\fR [perl #106538].
+.IP \(bu 4
+charnames has been updated from version 1.18 to 1.30.
+.Sp
+\&\f(CW\*(C`charnames\*(C'\fR can now be invoked with a new option, \f(CW\*(C`:loose\*(C'\fR,
+which is like the existing \f(CW\*(C`:full\*(C'\fR option, but enables Unicode loose
+name matching. Details are in "LOOSE MATCHES" in charnames.
+.IP \(bu 4
+B::Deparse has been upgraded from version 1.03 to 1.14. This fixes
+numerous deparsing bugs.
+.IP \(bu 4
+CGI has been upgraded from version 3.52 to 3.59.
+.Sp
+It uses the public and documented FCGI.pm API in CGI::Fast. CGI::Fast was
+using an FCGI API that was deprecated and removed from documentation
+more than ten years ago. Usage of this deprecated API with FCGI >=
+0.70 or FCGI <= 0.73 introduces a security issue.
+<https://rt.cpan.org/Public/Bug/Display.html?id=68380>
+<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE\-2011\-2766>
+.Sp
+Things that may break your code:
+.Sp
+\&\f(CWurl()\fR was fixed to return \f(CW\*(C`PATH_INFO\*(C'\fR when it is explicitly requested
+with either the \f(CW\*(C`path=>1\*(C'\fR or \f(CW\*(C`path_info=>1\*(C'\fR flag.
+.Sp
+If your code is running under mod_rewrite (or compatible) and you are
+calling \f(CWself_url()\fR or you are calling \f(CWurl()\fR and passing
+\&\f(CW\*(C`path_info=>1\*(C'\fR, these methods will actually be returning
+\&\f(CW\*(C`PATH_INFO\*(C'\fR now, as you have explicitly requested or \f(CWself_url()\fR
+has requested on your behalf.
+.Sp
+The \f(CW\*(C`PATH_INFO\*(C'\fR has been omitted in such URLs since the issue was
+introduced in the 3.12 release in December, 2005.
+.Sp
+This bug is so old your application may have come to depend on it or
+workaround it. Check for application before upgrading to this release.
+.Sp
+Examples of affected method calls:
+.Sp
+.Vb 5
+\& $q\->url(\-absolute => 1, \-query => 1, \-path_info => 1);
+\& $q\->url(\-path=>1);
+\& $q\->url(\-full=>1,\-path=>1);
+\& $q\->url(\-rewrite=>1,\-path=>1);
+\& $q\->self_url();
+.Ve
+.Sp
+We no longer read from STDIN when the Content-Length is not set,
+preventing requests with no Content-Length from sometimes freezing.
+This is consistent with the CGI RFC 3875, and is also consistent with
+CGI::Simple. However, the old behavior may have been expected by some
+command-line uses of CGI.pm.
+.Sp
+In addition, the DELETE HTTP verb is now supported.
+.IP \(bu 4
+Compress::Zlib has been upgraded from version 2.035 to 2.048.
+.Sp
+IO::Compress::Zip and IO::Uncompress::Unzip now have support for LZMA
+(method 14). There is a fix for a CRC issue in IO::Compress::Unzip and
+it supports Streamed Stored context now. And fixed a Zip64 issue in
+IO::Compress::Zip when the content size was exactly 0xFFFFFFFF.
+.IP \(bu 4
+Digest::SHA has been upgraded from version 5.61 to 5.71.
+.Sp
+Added BITS mode to the addfile method and shasum. This makes
+partial-byte inputs possible via files/STDIN and lets shasum check
+all 8074 NIST Msg vectors, where previously special programming was
+required to do this.
+.IP \(bu 4
+Encode has been upgraded from version 2.42 to 2.44.
+.Sp
+Missing aliases added, a deep recursion error fixed and various
+documentation updates.
+.Sp
+Addressed 'decode_xs n\-byte heap\-overflow' security bug in Unicode.xs
+(CVE\-2011\-2939). (5.14.2)
+.IP \(bu 4
+ExtUtils::CBuilder updated from version 0.280203 to 0.280206.
+.Sp
+The new version appends CFLAGS and LDFLAGS to their Config.pm
+counterparts.
+.IP \(bu 4
+ExtUtils::ParseXS has been upgraded from version 2.2210 to 3.16.
+.Sp
+Much of ExtUtils::ParseXS, the module behind the XS compiler \f(CW\*(C`xsubpp\*(C'\fR,
+was rewritten and cleaned up. It has been made somewhat more extensible
+and now finally uses strictures.
+.Sp
+The typemap logic has been moved into a separate module,
+ExtUtils::Typemaps. See "New Modules and Pragmata", above.
+.Sp
+For a complete set of changes, please see the ExtUtils::ParseXS
+changelog, available on the CPAN.
+.IP \(bu 4
+File::Glob has been upgraded from version 1.12 to 1.17.
+.Sp
+On Windows, tilde (~) expansion now checks the \f(CW\*(C`USERPROFILE\*(C'\fR environment
+variable, after checking \f(CW\*(C`HOME\*(C'\fR.
+.Sp
+It has a new \f(CW\*(C`:bsd_glob\*(C'\fR export tag, intended to replace \f(CW\*(C`:glob\*(C'\fR. Like
+\&\f(CW\*(C`:glob\*(C'\fR it overrides \f(CW\*(C`glob\*(C'\fR with a function that does not split the glob
+pattern into words, but, unlike \f(CW\*(C`:glob\*(C'\fR, it iterates properly in scalar
+context, instead of returning the last file.
+.Sp
+There are other changes affecting Perl's own \f(CW\*(C`glob\*(C'\fR operator (which uses
+File::Glob internally, except on VMS). See "Performance Enhancements"
+and "Selected Bug Fixes".
+.IP \(bu 4
+FindBin updated from version 1.50 to 1.51.
+.Sp
+It no longer returns a wrong result if a script of the same name as the
+current one exists in the path and is executable.
+.IP \(bu 4
+HTTP::Tiny has been upgraded from version 0.012 to 0.017.
+.Sp
+Added support for using \f(CW$ENV{http_proxy}\fR to set the default proxy host.
+.Sp
+Adds additional shorthand methods for all common HTTP verbs,
+a \f(CWpost_form()\fR method for POST-ing x\-www-form-urlencoded data and
+a \f(CWwww_form_urlencode()\fR utility method.
+.IP \(bu 4
+IO has been upgraded from version 1.25_04 to 1.25_06, and IO::Handle
+from version 1.31 to 1.33.
+.Sp
+Together, these upgrades fix a problem with IO::Handle's \f(CW\*(C`getline\*(C'\fR and
+\&\f(CW\*(C`getlines\*(C'\fR methods. When these methods are called on the special ARGV
+handle, the next file is automatically opened, as happens with the built-in
+\&\f(CW\*(C`<>\*(C'\fR and \f(CW\*(C`readline\*(C'\fR functions. But, unlike the built-ins, these
+methods were not respecting the caller's use of the open pragma and
+applying the appropriate I/O layers to the newly-opened file
+[rt.cpan.org #66474].
+.IP \(bu 4
+IPC::Cmd has been upgraded from version 0.70 to 0.76.
+.Sp
+Capturing of command output (both \f(CW\*(C`STDOUT\*(C'\fR and \f(CW\*(C`STDERR\*(C'\fR) is now supported
+using IPC::Open3 on MSWin32 without requiring IPC::Run.
+.IP \(bu 4
+IPC::Open3 has been upgraded from version 1.09 to 1.12.
+.Sp
+Fixes a bug which prevented use of \f(CW\*(C`open3\*(C'\fR on Windows when \f(CW*STDIN\fR,
+\&\f(CW*STDOUT\fR or \f(CW*STDERR\fR had been localized.
+.Sp
+Fixes a bug which prevented duplicating numeric file descriptors on Windows.
+.Sp
+\&\f(CW\*(C`open3\*(C'\fR with "\-" for the program name works once more. This was broken in
+version 1.06 (and hence in Perl 5.14.0) [perl #95748].
+.IP \(bu 4
+Locale::Codes has been upgraded from version 3.16 to 3.21.
+.Sp
+Added Language Extension codes (langext) and Language Variation codes (langvar)
+as defined in the IANA language registry.
+.Sp
+Added language codes from ISO 639\-5
+.Sp
+Added language/script codes from the IANA language subtag registry
+.Sp
+Fixed an uninitialized value warning [rt.cpan.org #67438].
+.Sp
+Fixed the return value for the all_XXX_codes and all_XXX_names functions
+[rt.cpan.org #69100].
+.Sp
+Reorganized modules to move Locale::MODULE to Locale::Codes::MODULE to allow
+for cleaner future additions. The original four modules (Locale::Language,
+Locale::Currency, Locale::Country, Locale::Script) will continue to work, but
+all new sets of codes will be added in the Locale::Codes namespace.
+.Sp
+The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now
+support retired codes. All codesets may be specified by a constant or
+by their name now. Previously, they were specified only by a constant.
+.Sp
+The alias_code function exists for backward compatibility. It has been
+replaced by rename_country_code. The alias_code function will be
+removed some time after September, 2013.
+.Sp
+All work is now done in the central module (Locale::Codes). Previously,
+some was still done in the wrapper modules (Locale::Codes::*). Added
+Language Family codes (langfam) as defined in ISO 639\-5.
+.IP \(bu 4
+Math::BigFloat has been upgraded from version 1.993 to 1.997.
+.Sp
+The \f(CW\*(C`numify\*(C'\fR method has been corrected to return a normalized Perl number
+(the result of \f(CW\*(C`0 + $thing\*(C'\fR), instead of a string [rt.cpan.org #66732].
+.IP \(bu 4
+Math::BigInt has been upgraded from version 1.994 to 1.998.
+.Sp
+It provides a new \f(CW\*(C`bsgn\*(C'\fR method that complements the \f(CW\*(C`babs\*(C'\fR method.
+.Sp
+It fixes the internal \f(CW\*(C`objectify\*(C'\fR function's handling of "foreign objects"
+so they are converted to the appropriate class (Math::BigInt or
+Math::BigFloat).
+.IP \(bu 4
+Math::BigRat has been upgraded from version 0.2602 to 0.2603.
+.Sp
+\&\f(CWint()\fR on a Math::BigRat object containing \-1/2 now creates a
+Math::BigInt containing 0, rather than \-0. Math::BigInt does not even
+support negative zero, so the resulting object was actually malformed
+[perl #95530].
+.IP \(bu 4
+Math::Complex has been upgraded from version 1.56 to 1.59
+and Math::Trig from version 1.2 to 1.22.
+.Sp
+Fixes include: correct copy constructor usage; fix polarwise formatting with
+numeric format specifier; and more stable \f(CW\*(C`great_circle_direction\*(C'\fR algorithm.
+.IP \(bu 4
+Module::CoreList has been upgraded from version 2.51 to 2.66.
+.Sp
+The \f(CW\*(C`corelist\*(C'\fR utility now understands the \f(CW\*(C`\-r\*(C'\fR option for displaying
+Perl release dates and the \f(CW\*(C`\-\-diff\*(C'\fR option to print the set of modlib
+changes between two perl distributions.
+.IP \(bu 4
+Module::Metadata has been upgraded from version 1.000004 to 1.000009.
+.Sp
+Adds \f(CW\*(C`provides\*(C'\fR method to generate a CPAN META provides data structure
+correctly; use of \f(CW\*(C`package_versions_from_directory\*(C'\fR is discouraged.
+.IP \(bu 4
+ODBM_File has been upgraded from version 1.10 to 1.12.
+.Sp
+The XS code is now compiled with \f(CW\*(C`PERL_NO_GET_CONTEXT\*(C'\fR, which will aid
+performance under ithreads.
+.IP \(bu 4
+open has been upgraded from version 1.08 to 1.10.
+.Sp
+It no longer turns off layers on standard handles when invoked without the
+":std" directive. Similarly, when invoked \fIwith\fR the ":std" directive, it
+now clears layers on STDERR before applying the new ones, and not just on
+STDIN and STDOUT [perl #92728].
+.IP \(bu 4
+overload has been upgraded from version 1.13 to 1.18.
+.Sp
+\&\f(CW\*(C`overload::Overloaded\*(C'\fR no longer calls \f(CW\*(C`can\*(C'\fR on the class, but uses
+another means to determine whether the object has overloading. It was
+never correct for it to call \f(CW\*(C`can\*(C'\fR, as overloading does not respect
+AUTOLOAD. So classes that autoload methods and implement \f(CW\*(C`can\*(C'\fR no longer
+have to account for overloading [perl #40333].
+.Sp
+A warning is now produced for invalid arguments. See "New Diagnostics".
+.IP \(bu 4
+PerlIO::scalar has been upgraded from version 0.11 to 0.14.
+.Sp
+(This is the module that implements \f(CW\*(C`open $fh, \*(Aq>\*(Aq, \e$scalar\*(C'\fR.)
+.Sp
+It fixes a problem with \f(CW\*(C`open my $fh, ">", \e$scalar\*(C'\fR not working if
+\&\f(CW$scalar\fR is a copy-on-write scalar. (5.14.2)
+.Sp
+It also fixes a hang that occurs with \f(CW\*(C`readline\*(C'\fR or \f(CW\*(C`<$fh>\*(C'\fR if a
+typeglob has been assigned to \f(CW$scalar\fR [perl #92258].
+.Sp
+It no longer assumes during \f(CW\*(C`seek\*(C'\fR that \f(CW$scalar\fR is a string internally.
+If it didn't crash, it was close to doing so [perl #92706]. Also, the
+internal print routine no longer assumes that the position set by \f(CW\*(C`seek\*(C'\fR
+is valid, but extends the string to that position, filling the intervening
+bytes (between the old length and the seek position) with nulls
+[perl #78980].
+.Sp
+Printing to an in-memory handle now works if the \f(CW$scalar\fR holds a reference,
+stringifying the reference before modifying it. References used to be
+treated as empty strings.
+.Sp
+Printing to an in-memory handle no longer crashes if the \f(CW$scalar\fR happens to
+hold a number internally, but no string buffer.
+.Sp
+Printing to an in-memory handle no longer creates scalars that confuse
+the regular expression engine [perl #108398].
+.IP \(bu 4
+Pod::Functions has been upgraded from version 1.04 to 1.05.
+.Sp
+\&\fIFunctions.pm\fR is now generated at perl build time from annotations in
+\&\fIperlfunc.pod\fR. This will ensure that Pod::Functions and perlfunc
+remain in synchronisation.
+.IP \(bu 4
+Pod::Html has been upgraded from version 1.11 to 1.1502.
+.Sp
+This is an extensive rewrite of Pod::Html to use Pod::Simple under
+the hood. The output has changed significantly.
+.IP \(bu 4
+Pod::Perldoc has been upgraded from version 3.15_03 to 3.17.
+.Sp
+It corrects the search paths on VMS [perl #90640]. (5.14.1)
+.Sp
+The \fB\-v\fR option now fetches the right section for \f(CW$0\fR.
+.Sp
+This upgrade has numerous significant fixes. Consult its changelog on
+the CPAN for more information.
+.IP \(bu 4
+POSIX has been upgraded from version 1.24 to 1.30.
+.Sp
+POSIX no longer uses AutoLoader. Any code which was relying on this
+implementation detail was buggy, and may fail because of this change.
+The module's Perl code has been considerably simplified, roughly halving
+the number of lines, with no change in functionality. The XS code has
+been refactored to reduce the size of the shared object by about 12%,
+with no change in functionality. More POSIX functions now have tests.
+.Sp
+\&\f(CW\*(C`sigsuspend\*(C'\fR and \f(CW\*(C`pause\*(C'\fR now run signal handlers before returning, as the
+whole point of these two functions is to wait until a signal has
+arrived, and then return \fIafter\fR it has been triggered. Delayed, or
+"safe", signals were preventing that from happening, possibly resulting in
+race conditions [perl #107216].
+.Sp
+\&\f(CW\*(C`POSIX::sleep\*(C'\fR is now a direct call into the underlying OS \f(CW\*(C`sleep\*(C'\fR
+function, instead of being a Perl wrapper on \f(CW\*(C`CORE::sleep\*(C'\fR.
+\&\f(CW\*(C`POSIX::dup2\*(C'\fR now returns the correct value on Win32 (\fIi.e.\fR, the file
+descriptor). \f(CW\*(C`POSIX::SigSet\*(C'\fR \f(CW\*(C`sigsuspend\*(C'\fR and \f(CW\*(C`sigpending\*(C'\fR and
+\&\f(CW\*(C`POSIX::pause\*(C'\fR now dispatch safe signals immediately before returning to
+their caller.
+.Sp
+\&\f(CW\*(C`POSIX::Termios::setattr\*(C'\fR now defaults the third argument to \f(CW\*(C`TCSANOW\*(C'\fR,
+instead of 0. On most platforms \f(CW\*(C`TCSANOW\*(C'\fR is defined to be 0, but on some
+0 is not a valid parameter, which caused a call with defaults to fail.
+.IP \(bu 4
+Socket has been upgraded from version 1.94 to 2.001.
+.Sp
+It has new functions and constants for handling IPv6 sockets:
+.Sp
+.Vb 11
+\& pack_ipv6_mreq
+\& unpack_ipv6_mreq
+\& IPV6_ADD_MEMBERSHIP
+\& IPV6_DROP_MEMBERSHIP
+\& IPV6_MTU
+\& IPV6_MTU_DISCOVER
+\& IPV6_MULTICAST_HOPS
+\& IPV6_MULTICAST_IF
+\& IPV6_MULTICAST_LOOP
+\& IPV6_UNICAST_HOPS
+\& IPV6_V6ONLY
+.Ve
+.IP \(bu 4
+Storable has been upgraded from version 2.27 to 2.34.
+.Sp
+It no longer turns copy-on-write scalars into read-only scalars when
+freezing and thawing.
+.IP \(bu 4
+Sys::Syslog has been upgraded from version 0.27 to 0.29.
+.Sp
+This upgrade closes many outstanding bugs.
+.IP \(bu 4
+Term::ANSIColor has been upgraded from version 3.00 to 3.01.
+.Sp
+Only interpret an initial array reference as a list of colors, not any initial
+reference, allowing the colored function to work properly on objects with
+stringification defined.
+.IP \(bu 4
+Term::ReadLine has been upgraded from version 1.07 to 1.09.
+.Sp
+Term::ReadLine now supports any event loop, including unpublished ones and
+simple IO::Select, loops without the need to rewrite existing code for
+any particular framework [perl #108470].
+.IP \(bu 4
+threads::shared has been upgraded from version 1.37 to 1.40.
+.Sp
+Destructors on shared objects used to be ignored sometimes if the objects
+were referenced only by shared data structures. This has been mostly
+fixed, but destructors may still be ignored if the objects still exist at
+global destruction time [perl #98204].
+.IP \(bu 4
+Unicode::Collate has been upgraded from version 0.73 to 0.89.
+.Sp
+Updated to CLDR 1.9.1
+.Sp
+Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk,
+zh_\|_pinyin, zh_\|_stroke
+.Sp
+Newly supported locales: bn, fa, ml, mr, or, pa, sa, si, si_\|_dictionary,
+sr_Latn, sv_\|_reformed, ta, te, th, ur, wae.
+.Sp
+Tailored compatibility ideographs as well as unified ideographs for the
+locales: ja, ko, zh_\|_big5han, zh_\|_gb2312han, zh_\|_pinyin, zh_\|_stroke.
+.Sp
+Locale/*.pl files are now searched for in \f(CW@INC\fR.
+.IP \(bu 4
+Unicode::Normalize has been upgraded from version 1.10 to 1.14.
+.Sp
+Fixes for the removal of \fIunicore/CompositionExclusions.txt\fR from core.
+.IP \(bu 4
+Unicode::UCD has been upgraded from version 0.32 to 0.43.
+.Sp
+This adds four new functions: \f(CWprop_aliases()\fR and
+\&\f(CWprop_value_aliases()\fR, which are used to find all Unicode-approved
+synonyms for property names, or to convert from one name to another;
+\&\f(CW\*(C`prop_invlist\*(C'\fR which returns all code points matching a given
+Unicode binary property; and \f(CW\*(C`prop_invmap\*(C'\fR which returns the complete
+specification of a given Unicode property.
+.IP \(bu 4
+Win32API::File has been upgraded from version 0.1101 to 0.1200.
+.Sp
+Added SetStdHandle and GetStdHandle functions
+.SS "Removed Modules and Pragmata"
+.IX Subsection "Removed Modules and Pragmata"
+As promised in Perl 5.14.0's release notes, the following modules have
+been removed from the core distribution, and if needed should be installed
+from CPAN instead.
+.IP \(bu 4
+Devel::DProf has been removed from the Perl core. Prior version was
+20110228.00.
+.IP \(bu 4
+Shell has been removed from the Perl core. Prior version was 0.72_01.
+.IP \(bu 4
+Several old perl4\-style libraries which have been deprecated with 5.14
+are now removed:
+.Sp
+.Vb 5
+\& abbrev.pl assert.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl
+\& complete.pl ctime.pl dotsh.pl exceptions.pl fastcwd.pl flush.pl
+\& getcwd.pl getopt.pl getopts.pl hostname.pl importenv.pl
+\& lib/find{,depth}.pl look.pl newgetopt.pl open2.pl open3.pl
+\& pwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl
+.Ve
+.Sp
+They can be found on CPAN as Perl4::CoreLibs.
+.SH Documentation
+.IX Header "Documentation"
+.SS "New Documentation"
+.IX Subsection "New Documentation"
+\fIperldtrace\fR
+.IX Subsection "perldtrace"
+.PP
+perldtrace describes Perl's DTrace support, listing the provided probes
+and gives examples of their use.
+.PP
+\fIperlexperiment\fR
+.IX Subsection "perlexperiment"
+.PP
+This document is intended to provide a list of experimental features in
+Perl. It is still a work in progress.
+.PP
+\fIperlootut\fR
+.IX Subsection "perlootut"
+.PP
+This a new OO tutorial. It focuses on basic OO concepts, and then recommends
+that readers choose an OO framework from CPAN.
+.PP
+\fIperlxstypemap\fR
+.IX Subsection "perlxstypemap"
+.PP
+The new manual describes the XS typemapping mechanism in unprecedented
+detail and combines new documentation with information extracted from
+perlxs and the previously unofficial list of all core typemaps.
+.SS "Changes to Existing Documentation"
+.IX Subsection "Changes to Existing Documentation"
+\fIperlapi\fR
+.IX Subsection "perlapi"
+.IP \(bu 4
+The HV API has long accepted negative lengths to show that the key is
+in UTF8. This is now documented.
+.IP \(bu 4
+The \f(CWboolSV()\fR macro is now documented.
+.PP
+\fIperlfunc\fR
+.IX Subsection "perlfunc"
+.IP \(bu 4
+\&\f(CW\*(C`dbmopen\*(C'\fR treats a 0 mode as a special case, that prevents a nonexistent
+file from being created. This has been the case since Perl 5.000, but was
+never documented anywhere. Now the perlfunc entry mentions it
+[perl #90064].
+.IP \(bu 4
+As an accident of history, \f(CW\*(C`open $fh, \*(Aq<:\*(Aq, ...\*(C'\fR applies the default
+layers for the platform (\f(CW\*(C`:raw\*(C'\fR on Unix, \f(CW\*(C`:crlf\*(C'\fR on Windows), ignoring
+whatever is declared by open.pm. This seems such a useful feature
+it has been documented in perlfunc and open.
+.IP \(bu 4
+The entry for \f(CW\*(C`split\*(C'\fR has been rewritten. It is now far clearer than
+before.
+.PP
+\fIperlguts\fR
+.IX Subsection "perlguts"
+.IP \(bu 4
+A new section, Autoloading with XSUBs,
+has been added, which explains the two APIs for accessing the name of the
+autoloaded sub.
+.IP \(bu 4
+Some function descriptions in perlguts were confusing, as it was
+not clear whether they referred to the function above or below the
+description. This has been clarified [perl #91790].
+.PP
+\fIperlobj\fR
+.IX Subsection "perlobj"
+.IP \(bu 4
+This document has been rewritten from scratch, and its coverage of various OO
+concepts has been expanded.
+.PP
+\fIperlop\fR
+.IX Subsection "perlop"
+.IP \(bu 4
+Documentation of the smartmatch operator has been reworked and moved from
+perlsyn to perlop where it belongs.
+.Sp
+It has also been corrected for the case of \f(CW\*(C`undef\*(C'\fR on the left-hand
+side. The list of different smart match behaviors had an item in the
+wrong place.
+.IP \(bu 4
+Documentation of the ellipsis statement (\f(CW\*(C`...\*(C'\fR) has been reworked and
+moved from perlop to perlsyn.
+.IP \(bu 4
+The explanation of bitwise operators has been expanded to explain how they
+work on Unicode strings (5.14.1).
+.IP \(bu 4
+More examples for \f(CW\*(C`m//g\*(C'\fR have been added (5.14.1).
+.IP \(bu 4
+The \f(CW\*(C`<<\eFOO\*(C'\fR here-doc syntax has been documented (5.14.1).
+.PP
+\fIperlpragma\fR
+.IX Subsection "perlpragma"
+.IP \(bu 4
+There is now a standard convention for naming keys in the \f(CW\*(C`%^H\*(C'\fR,
+documented under Key naming.
+.PP
+\fI"Laundering and Detecting Tainted Data" in perlsec\fR
+.IX Subsection """Laundering and Detecting Tainted Data"" in perlsec"
+.IP \(bu 4
+The example function for checking for taintedness contained a subtle
+error. \f(CW$@\fR needs to be localized to prevent its changing this
+global's value outside the function. The preferred method to check for
+this remains "tainted" in Scalar::Util.
+.PP
+\fIperllol\fR
+.IX Subsection "perllol"
+.IP \(bu 4
+perllol has been expanded with examples using the new \f(CW\*(C`push $scalar\*(C'\fR
+syntax introduced in Perl 5.14.0 (5.14.1).
+.PP
+\fIperlmod\fR
+.IX Subsection "perlmod"
+.IP \(bu 4
+perlmod now states explicitly that some types of explicit symbol table
+manipulation are not supported. This codifies what was effectively already
+the case [perl #78074].
+.PP
+\fIperlpodstyle\fR
+.IX Subsection "perlpodstyle"
+.IP \(bu 4
+The tips on which formatting codes to use have been corrected and greatly
+expanded.
+.IP \(bu 4
+There are now a couple of example one-liners for previewing POD files after
+they have been edited.
+.PP
+\fIperlre\fR
+.IX Subsection "perlre"
+.IP \(bu 4
+The \f(CW\*(C`(*COMMIT)\*(C'\fR directive is now listed in the right section
+(Verbs without an argument).
+.PP
+\fIperlrun\fR
+.IX Subsection "perlrun"
+.IP \(bu 4
+perlrun has undergone a significant clean-up. Most notably, the
+\&\fB\-0x...\fR form of the \fB\-0\fR flag has been clarified, and the final section
+on environment variables has been corrected and expanded (5.14.1).
+.PP
+\fIperlsub\fR
+.IX Subsection "perlsub"
+.IP \(bu 4
+The ($;) prototype syntax, which has existed for rather a long time, is now
+documented in perlsub. It lets a unary function have the same
+precedence as a list operator.
+.PP
+\fIperltie\fR
+.IX Subsection "perltie"
+.IP \(bu 4
+The required syntax for tying handles has been documented.
+.PP
+\fIperlvar\fR
+.IX Subsection "perlvar"
+.IP \(bu 4
+The documentation for $! has been corrected and clarified.
+It used to state that $! could be \f(CW\*(C`undef\*(C'\fR, which is not the case. It was
+also unclear whether system calls set C's \f(CW\*(C`errno\*(C'\fR or Perl's \f(CW$!\fR
+[perl #91614].
+.IP \(bu 4
+Documentation for $$ has been amended with additional
+cautions regarding changing the process ID.
+.PP
+\fIOther Changes\fR
+.IX Subsection "Other Changes"
+.IP \(bu 4
+perlxs was extended with documentation on inline typemaps.
+.IP \(bu 4
+perlref has a new Circular References
+section explaining how circularities may not be freed and how to solve that
+with weak references.
+.IP \(bu 4
+Parts of perlapi were clarified, and Perl equivalents of some C
+functions have been added as an additional mode of exposition.
+.IP \(bu 4
+A few parts of perlre and perlrecharclass were clarified.
+.SS "Removed Documentation"
+.IX Subsection "Removed Documentation"
+\fIOld OO Documentation\fR
+.IX Subsection "Old OO Documentation"
+.PP
+The old OO tutorials, perltoot, perltooc, and perlboot, have been
+removed. The perlbot (bag of object tricks) document has been removed
+as well.
+.PP
+\fIDevelopment Deltas\fR
+.IX Subsection "Development Deltas"
+.PP
+The perldelta files for development releases are no longer packaged with
+perl. These can still be found in the perl source code repository.
+.SH Diagnostics
+.IX Header "Diagnostics"
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages. For the complete list of
+diagnostic messages, see perldiag.
+.SS "New Diagnostics"
+.IX Subsection "New Diagnostics"
+\fINew Errors\fR
+.IX Subsection "New Errors"
+.IP \(bu 4
+Cannot set tied \f(CW@DB::args\fR
+.Sp
+This error occurs when \f(CW\*(C`caller\*(C'\fR tries to set \f(CW@DB::args\fR but finds it
+tied. Before this error was added, it used to crash instead.
+.IP \(bu 4
+Cannot tie unreifiable array
+.Sp
+This error is part of a safety check that the \f(CW\*(C`tie\*(C'\fR operator does before
+tying a special array like \f(CW@_\fR. You should never see this message.
+.IP \(bu 4
+&CORE::%s cannot be called directly
+.Sp
+This occurs when a subroutine in the \f(CW\*(C`CORE::\*(C'\fR namespace is called
+with \f(CW&foo\fR syntax or through a reference. Some subroutines
+in this package cannot yet be called that way, but must be
+called as barewords. See "Subroutines in the \f(CW\*(C`CORE\*(C'\fR namespace", above.
+.IP \(bu 4
+Source filters apply only to byte streams
+.Sp
+This new error occurs when you try to activate a source filter (usually by
+loading a source filter module) within a string passed to \f(CW\*(C`eval\*(C'\fR under the
+\&\f(CW\*(C`unicode_eval\*(C'\fR feature.
+.PP
+\fINew Warnings\fR
+.IX Subsection "New Warnings"
+.IP \(bu 4
+defined(@array) is deprecated
+.Sp
+The long-deprecated \f(CWdefined(@array)\fR now also warns for package variables.
+Previously it issued a warning for lexical variables only.
+.IP \(bu 4
+\&\fBlength()\fR used on \f(CW%s\fR
+.Sp
+This new warning occurs when \f(CW\*(C`length\*(C'\fR is used on an array or hash, instead
+of \f(CWscalar(@array)\fR or \f(CW\*(C`scalar(keys %hash)\*(C'\fR.
+.IP \(bu 4
+lvalue attribute \f(CW%s\fR already-defined subroutine
+.Sp
+attributes.pm now emits this warning when the :lvalue
+attribute is applied to a Perl subroutine that has already been defined, as
+doing so can have unexpected side-effects.
+.IP \(bu 4
+overload arg '%s' is invalid
+.Sp
+This warning, in the "overload" category, is produced when the overload
+pragma is given an argument it doesn't recognize, presumably a mistyped
+operator.
+.IP \(bu 4
+$[ used in \f(CW%s\fR (did you mean $] ?)
+.Sp
+This new warning exists to catch the mistaken use of \f(CW$[\fR in version
+checks. \f(CW$]\fR, not \f(CW$[\fR, contains the version number.
+.IP \(bu 4
+Useless assignment to a temporary
+.Sp
+Assigning to a temporary scalar returned
+from an lvalue subroutine now produces this
+warning [perl #31946].
+.IP \(bu 4
+Useless use of \eE
+.Sp
+\&\f(CW\*(C`\eE\*(C'\fR does nothing unless preceded by \f(CW\*(C`\eQ\*(C'\fR, \f(CW\*(C`\eL\*(C'\fR or \f(CW\*(C`\eU\*(C'\fR.
+.SS "Removed Errors"
+.IX Subsection "Removed Errors"
+.IP \(bu 4
+"sort is now a reserved word"
+.Sp
+This error used to occur when \f(CW\*(C`sort\*(C'\fR was called without arguments,
+followed by \f(CW\*(C`;\*(C'\fR or \f(CW\*(C`)\*(C'\fR. (E.g., \f(CW\*(C`sort;\*(C'\fR would die, but \f(CW\*(C`{sort}\*(C'\fR was
+OK.) This error message was added in Perl 3 to catch code like
+\&\f(CWclose(sort)\fR which would no longer work. More than two decades later,
+this message is no longer appropriate. Now \f(CW\*(C`sort\*(C'\fR without arguments is
+always allowed, and returns an empty list, as it did in those cases
+where it was already allowed [perl #90030].
+.SS "Changes to Existing Diagnostics"
+.IX Subsection "Changes to Existing Diagnostics"
+.IP \(bu 4
+The "Applying pattern match..." or similar warning produced when an
+array or hash is on the left-hand side of the \f(CW\*(C`=~\*(C'\fR operator now
+mentions the name of the variable.
+.IP \(bu 4
+The "Attempt to free non-existent shared string" has had the spelling
+of "non-existent" corrected to "nonexistent". It was already listed
+with the correct spelling in perldiag.
+.IP \(bu 4
+The error messages for using \f(CW\*(C`default\*(C'\fR and \f(CW\*(C`when\*(C'\fR outside a
+topicalizer have been standardized to match the messages for \f(CW\*(C`continue\*(C'\fR
+and loop controls. They now read 'Can't "default" outside a
+topicalizer' and 'Can't "when" outside a topicalizer'. They both used
+to be 'Can't use \fBwhen()\fR outside a topicalizer' [perl #91514].
+.IP \(bu 4
+The message, "Code point 0x%X is not Unicode, no properties match it;
+all inverse properties do" has been changed to "Code point 0x%X is not
+Unicode, all \ep{} matches fail; all \eP{} matches succeed".
+.IP \(bu 4
+Redefinition warnings for constant subroutines used to be mandatory,
+even occurring under \f(CW\*(C`no warnings\*(C'\fR. Now they respect the warnings
+pragma.
+.IP \(bu 4
+The "glob failed" warning message is now suppressible via \f(CW\*(C`no warnings\*(C'\fR
+[perl #111656].
+.IP \(bu 4
+The Invalid version format
+error message now says "negative version number" within the parentheses,
+rather than "non-numeric data", for negative numbers.
+.IP \(bu 4
+The two warnings
+Possible attempt to put comments in \fBqw()\fR list
+and
+Possible attempt to separate words with commas
+are no longer mutually exclusive: the same \f(CW\*(C`qw\*(C'\fR construct may produce
+both.
+.IP \(bu 4
+The uninitialized warning for \f(CW\*(C`y///r\*(C'\fR when \f(CW$_\fR is implicit and
+undefined now mentions the variable name, just like the non\-/r variation
+of the operator.
+.IP \(bu 4
+The 'Use of "foo" without parentheses is ambiguous' warning has been
+extended to apply also to user-defined subroutines with a (;$)
+prototype, and not just to built-in functions.
+.IP \(bu 4
+Warnings that mention the names of lexical (\f(CW\*(C`my\*(C'\fR) variables with
+Unicode characters in them now respect the presence or absence of the
+\&\f(CW\*(C`:utf8\*(C'\fR layer on the output handle, instead of outputting UTF8
+regardless. Also, the correct names are included in the strings passed
+to \f(CW$SIG{_\|_WARN_\|_}\fR handlers, rather than the raw UTF8 bytes.
+.SH "Utility Changes"
+.IX Header "Utility Changes"
+\fIh2ph\fR
+.IX Subsection "h2ph"
+.IP \(bu 4
+h2ph used to generate code of the form
+.Sp
+.Vb 3
+\& unless(defined(&FOO)) {
+\& sub FOO () {42;}
+\& }
+.Ve
+.Sp
+But the subroutine is a compile-time declaration, and is hence unaffected
+by the condition. It has now been corrected to emit a string \f(CW\*(C`eval\*(C'\fR
+around the subroutine [perl #99368].
+.PP
+\fIsplain\fR
+.IX Subsection "splain"
+.IP \(bu 4
+\&\fIsplain\fR no longer emits backtraces with the first line number repeated.
+.Sp
+This:
+.Sp
+.Vb 6
+\& Uncaught exception from user code:
+\& Cannot fwiddle the fwuddle at \-e line 1.
+\& at \-e line 1
+\& main::baz() called at \-e line 1
+\& main::bar() called at \-e line 1
+\& main::foo() called at \-e line 1
+.Ve
+.Sp
+has become this:
+.Sp
+.Vb 5
+\& Uncaught exception from user code:
+\& Cannot fwiddle the fwuddle at \-e line 1.
+\& main::baz() called at \-e line 1
+\& main::bar() called at \-e line 1
+\& main::foo() called at \-e line 1
+.Ve
+.IP \(bu 4
+Some error messages consist of multiple lines that are listed as separate
+entries in perldiag. splain has been taught to find the separate
+entries in these cases, instead of simply failing to find the message.
+.PP
+\fIzipdetails\fR
+.IX Subsection "zipdetails"
+.IP \(bu 4
+This is a new utility, included as part of an
+IO::Compress::Base upgrade.
+.Sp
+zipdetails displays information about the internal record structure
+of the zip file. It is not concerned with displaying any details of
+the compressed data stored in the zip file.
+.SH "Configuration and Compilation"
+.IX Header "Configuration and Compilation"
+.IP \(bu 4
+\&\fIregexp.h\fR has been modified for compatibility with GCC's \fB\-Werror\fR
+option, as used by some projects that include perl's header files (5.14.1).
+.IP \(bu 4
+\&\f(CW\*(C`USE_LOCALE{,_COLLATE,_CTYPE,_NUMERIC}\*(C'\fR have been added the output of perl \-V
+as they have affect the behavior of the interpreter binary (albeit
+in only a small area).
+.IP \(bu 4
+The code and tests for IPC::Open2 have been moved from \fIext/IPC\-Open2\fR
+into \fIext/IPC\-Open3\fR, as \f(CWIPC::Open2::open2()\fR is implemented as a thin
+wrapper around \f(CWIPC::Open3::_open3()\fR, and hence is very tightly coupled to
+it.
+.IP \(bu 4
+The magic types and magic vtables are now generated from data in a new script
+\&\fIregen/mg_vtable.pl\fR, instead of being maintained by hand. As different
+EBCDIC variants can't agree on the code point for '~', the character to code
+point conversion is done at build time by \fIgenerate_uudmap\fR to a new generated
+header \fImg_data.h\fR. \f(CW\*(C`PL_vtbl_bm\*(C'\fR and \f(CW\*(C`PL_vtbl_fm\*(C'\fR are now defined by the
+pre-processor as \f(CW\*(C`PL_vtbl_regexp\*(C'\fR, instead of being distinct C variables.
+\&\f(CW\*(C`PL_vtbl_sig\*(C'\fR has been removed.
+.IP \(bu 4
+Building with \f(CW\*(C`\-DPERL_GLOBAL_STRUCT\*(C'\fR works again. This configuration is not
+generally used.
+.IP \(bu 4
+Perl configured with \fIMAD\fR now correctly frees \f(CW\*(C`MADPROP\*(C'\fR structures when
+OPs are freed. \f(CW\*(C`MADPROP\*(C'\fRs are now allocated with \f(CWPerlMemShared_malloc()\fR
+.IP \(bu 4
+\&\fImakedef.pl\fR has been refactored. This should have no noticeable affect on
+any of the platforms that use it as part of their build (AIX, VMS, Win32).
+.IP \(bu 4
+\&\f(CW\*(C`useperlio\*(C'\fR can no longer be disabled.
+.IP \(bu 4
+The file \fIglobal.sym\fR is no longer needed, and has been removed. It
+contained a list of all exported functions, one of the files generated by
+\&\fIregen/embed.pl\fR from data in \fIembed.fnc\fR and \fIregen/opcodes\fR. The code
+has been refactored so that the only user of \fIglobal.sym\fR, \fImakedef.pl\fR,
+now reads \fIembed.fnc\fR and \fIregen/opcodes\fR directly, removing the need to
+store the list of exported functions in an intermediate file.
+.Sp
+As \fIglobal.sym\fR was never installed, this change should not be visible
+outside the build process.
+.IP \(bu 4
+\&\fIpod/buildtoc\fR, used by the build process to build perltoc, has been
+refactored and simplified. It now contains only code to build perltoc;
+the code to regenerate Makefiles has been moved to \fIPorting/pod_rules.pl\fR.
+It's a bug if this change has any material effect on the build process.
+.IP \(bu 4
+\&\fIpod/roffitall\fR is now built by \fIpod/buildtoc\fR, instead of being
+shipped with the distribution. Its list of manpages is now generated
+(and therefore current). See also RT #103202 for an unresolved related
+issue.
+.IP \(bu 4
+The man page for \f(CW\*(C`XS::Typemap\*(C'\fR is no longer installed. \f(CW\*(C`XS::Typemap\*(C'\fR
+is a test module which is not installed, hence installing its
+documentation makes no sense.
+.IP \(bu 4
+The \-Dusesitecustomize and \-Duserelocatableinc options now work
+together properly.
+.SH "Platform Support"
+.IX Header "Platform Support"
+.SS "Platform-Specific Notes"
+.IX Subsection "Platform-Specific Notes"
+\fICygwin\fR
+.IX Subsection "Cygwin"
+.IP \(bu 4
+Since version 1.7, Cygwin supports native UTF\-8 paths. If Perl is built
+under that environment, directory and filenames will be UTF\-8 encoded.
+.IP \(bu 4
+Cygwin does not initialize all original Win32 environment variables. See
+\&\fIREADME.cygwin\fR for a discussion of the newly-added
+\&\f(CWCygwin::sync_winenv()\fR function [perl #110190] and for
+further links.
+.PP
+\fIHP-UX\fR
+.IX Subsection "HP-UX"
+.IP \(bu 4
+HP-UX PA\-RISC/64 now supports gcc\-4.x
+.Sp
+A fix to correct the socketsize now makes the test suite pass on HP-UX
+PA-RISC for 64bitall builds. (5.14.2)
+.PP
+\fIVMS\fR
+.IX Subsection "VMS"
+.IP \(bu 4
+Remove unnecessary includes, fix miscellaneous compiler warnings and
+close some unclosed comments on \fIvms/vms.c\fR.
+.IP \(bu 4
+Remove sockadapt layer from the VMS build.
+.IP \(bu 4
+Explicit support for VMS versions before v7.0 and DEC C versions
+before v6.0 has been removed.
+.IP \(bu 4
+Since Perl 5.10.1, the home-grown \f(CW\*(C`stat\*(C'\fR wrapper has been unable to
+distinguish between a directory name containing an underscore and an
+otherwise-identical filename containing a dot in the same position
+(e.g., t/test_pl as a directory and t/test.pl as a file). This problem
+has been corrected.
+.IP \(bu 4
+The build on VMS now permits names of the resulting symbols in C code for
+Perl longer than 31 characters. Symbols like
+\&\f(CW\*(C`Perl_\|_it_was_the_best_of_times_it_was_the_worst_of_times\*(C'\fR can now be
+created freely without causing the VMS linker to seize up.
+.PP
+\fIGNU/Hurd\fR
+.IX Subsection "GNU/Hurd"
+.IP \(bu 4
+Numerous build and test failures on GNU/Hurd have been resolved with hints
+for building DBM modules, detection of the library search path, and enabling
+of large file support.
+.PP
+\fIOpenVOS\fR
+.IX Subsection "OpenVOS"
+.IP \(bu 4
+Perl is now built with dynamic linking on OpenVOS, the minimum supported
+version of which is now Release 17.1.0.
+.PP
+\fISunOS\fR
+.IX Subsection "SunOS"
+.PP
+The CC workshop C++ compiler is now detected and used on systems that ship
+without cc.
+.SH "Internal Changes"
+.IX Header "Internal Changes"
+.IP \(bu 4
+The compiled representation of formats is now stored via the \f(CW\*(C`mg_ptr\*(C'\fR of
+their \f(CW\*(C`PERL_MAGIC_fm\*(C'\fR. Previously it was stored in the string buffer,
+beyond \f(CWSvLEN()\fR, the regular end of the string. \f(CWSvCOMPILED()\fR and
+\&\f(CW\*(C`SvCOMPILED_{on,off}()\*(C'\fR now exist solely for compatibility for XS code.
+The first is always 0, the other two now no-ops. (5.14.1)
+.IP \(bu 4
+Some global variables have been marked \f(CW\*(C`const\*(C'\fR, members in the interpreter
+structure have been re-ordered, and the opcodes have been re-ordered. The
+op \f(CW\*(C`OP_AELEMFAST\*(C'\fR has been split into \f(CW\*(C`OP_AELEMFAST\*(C'\fR and \f(CW\*(C`OP_AELEMFAST_LEX\*(C'\fR.
+.IP \(bu 4
+When empting a hash of its elements (e.g., via undef(%h), or \f(CW%h\fR=()), HvARRAY
+field is no longer temporarily zeroed. Any destructors called on the freed
+elements see the remaining elements. Thus, \f(CW%h\fR=() becomes more like
+\&\f(CW\*(C`delete $h{$_} for keys %h\*(C'\fR.
+.IP \(bu 4
+Boyer-Moore compiled scalars are now PVMGs, and the Boyer-Moore tables are now
+stored via the mg_ptr of their \f(CW\*(C`PERL_MAGIC_bm\*(C'\fR.
+Previously they were PVGVs, with the tables stored in
+the string buffer, beyond \f(CWSvLEN()\fR. This eliminates
+the last place where the core stores data beyond \f(CWSvLEN()\fR.
+.IP \(bu 4
+Simplified logic in \f(CWPerl_sv_magic()\fR introduces a small change of
+behavior for error cases involving unknown magic types. Previously, if
+\&\f(CWPerl_sv_magic()\fR was passed a magic type unknown to it, it would
+.RS 4
+.IP 1. 4
+Croak "Modification of a read-only value attempted" if read only
+.IP 2. 4
+Return without error if the SV happened to already have this magic
+.IP 3. 4
+otherwise croak "Don't know how to handle magic of type \e\e%o"
+.RE
+.RS 4
+.Sp
+Now it will always croak "Don't know how to handle magic of type \e\e%o", even
+on read-only values, or SVs which already have the unknown magic type.
+.RE
+.IP \(bu 4
+The experimental \f(CW\*(C`fetch_cop_label\*(C'\fR function has been renamed to
+\&\f(CW\*(C`cop_fetch_label\*(C'\fR.
+.IP \(bu 4
+The \f(CW\*(C`cop_store_label\*(C'\fR function has been added to the API, but is
+experimental.
+.IP \(bu 4
+\&\fIembedvar.h\fR has been simplified, and one level of macro indirection for
+PL_* variables has been removed for the default (non-multiplicity)
+configuration. PERLVAR*() macros now directly expand their arguments to
+tokens such as \f(CW\*(C`PL_defgv\*(C'\fR, instead of expanding to \f(CW\*(C`PL_Idefgv\*(C'\fR, with
+\&\fIembedvar.h\fR defining a macro to map \f(CW\*(C`PL_Idefgv\*(C'\fR to \f(CW\*(C`PL_defgv\*(C'\fR. XS code
+which has unwarranted chumminess with the implementation may need updating.
+.IP \(bu 4
+An API has been added to explicitly choose whether to export XSUB
+symbols. More detail can be found in the comments for commit e64345f8.
+.IP \(bu 4
+The \f(CW\*(C`is_gv_magical_sv\*(C'\fR function has been eliminated and merged with
+\&\f(CW\*(C`gv_fetchpvn_flags\*(C'\fR. It used to be called to determine whether a GV
+should be autovivified in rvalue context. Now it has been replaced with a
+new \f(CW\*(C`GV_ADDMG\*(C'\fR flag (not part of the API).
+.IP \(bu 4
+The returned code point from the function \f(CWutf8n_to_uvuni()\fR
+when the input is malformed UTF\-8, malformations are allowed, and
+\&\f(CW\*(C`utf8\*(C'\fR warnings are off is now the Unicode REPLACEMENT CHARACTER
+whenever the malformation is such that no well-defined code point can be
+computed. Previously the returned value was essentially garbage. The
+only malformations that have well-defined values are a zero-length
+string (0 is the return), and overlong UTF\-8 sequences.
+.IP \(bu 4
+Padlists are now marked \f(CW\*(C`AvREAL\*(C'\fR; i.e., reference-counted. They have
+always been reference-counted, but were not marked real, because \fIpad.c\fR
+did its own clean-up, instead of using the usual clean-up code in \fIsv.c\fR.
+That caused problems in thread cloning, so now the \f(CW\*(C`AvREAL\*(C'\fR flag is on,
+but is turned off in \fIpad.c\fR right before the padlist is freed (after
+\&\fIpad.c\fR has done its custom freeing of the pads).
+.IP \(bu 4
+All C files that make up the Perl core have been converted to UTF\-8.
+.IP \(bu 4
+These new functions have been added as part of the work on Unicode symbols:
+.Sp
+.Vb 10
+\& HvNAMELEN
+\& HvNAMEUTF8
+\& HvENAMELEN
+\& HvENAMEUTF8
+\& gv_init_pv
+\& gv_init_pvn
+\& gv_init_pvsv
+\& gv_fetchmeth_pv
+\& gv_fetchmeth_pvn
+\& gv_fetchmeth_sv
+\& gv_fetchmeth_pv_autoload
+\& gv_fetchmeth_pvn_autoload
+\& gv_fetchmeth_sv_autoload
+\& gv_fetchmethod_pv_flags
+\& gv_fetchmethod_pvn_flags
+\& gv_fetchmethod_sv_flags
+\& gv_autoload_pv
+\& gv_autoload_pvn
+\& gv_autoload_sv
+\& newGVgen_flags
+\& sv_derived_from_pv
+\& sv_derived_from_pvn
+\& sv_derived_from_sv
+\& sv_does_pv
+\& sv_does_pvn
+\& sv_does_sv
+\& whichsig_pv
+\& whichsig_pvn
+\& whichsig_sv
+\& newCONSTSUB_flags
+.Ve
+.Sp
+The gv_fetchmethod_*_flags functions, like gv_fetchmethod_flags, are
+experimental and may change in a future release.
+.IP \(bu 4
+The following functions were added. These are \fInot\fR part of the API:
+.Sp
+.Vb 9
+\& GvNAMEUTF8
+\& GvENAMELEN
+\& GvENAME_HEK
+\& CopSTASH_flags
+\& CopSTASH_flags_set
+\& PmopSTASH_flags
+\& PmopSTASH_flags_set
+\& sv_sethek
+\& HEKfARG
+.Ve
+.Sp
+There is also a \f(CW\*(C`HEKf\*(C'\fR macro corresponding to \f(CW\*(C`SVf\*(C'\fR, for
+interpolating HEKs in formatted strings.
+.IP \(bu 4
+\&\f(CW\*(C`sv_catpvn_flags\*(C'\fR takes a couple of new internal-only flags,
+\&\f(CW\*(C`SV_CATBYTES\*(C'\fR and \f(CW\*(C`SV_CATUTF8\*(C'\fR, which tell it whether the char array to
+be concatenated is UTF8. This allows for more efficient concatenation than
+creating temporary SVs to pass to \f(CW\*(C`sv_catsv\*(C'\fR.
+.IP \(bu 4
+For XS AUTOLOAD subs, \f(CW$AUTOLOAD\fR is set once more, as it was in 5.6.0. This
+is in addition to setting \f(CWSvPVX(cv)\fR, for compatibility with 5.8 to 5.14.
+See "Autoloading with XSUBs" in perlguts.
+.IP \(bu 4
+Perl now checks whether the array (the linearized isa) returned by a MRO
+plugin begins with the name of the class itself, for which the array was
+created, instead of assuming that it does. This prevents the first element
+from being skipped during method lookup. It also means that
+\&\f(CW\*(C`mro::get_linear_isa\*(C'\fR may return an array with one more element than the
+MRO plugin provided [perl #94306].
+.IP \(bu 4
+\&\f(CW\*(C`PL_curstash\*(C'\fR is now reference-counted.
+.IP \(bu 4
+There are now feature bundle hints in \f(CW\*(C`PL_hints\*(C'\fR (\f(CW$^H\fR) that version
+declarations use, to avoid having to load \fIfeature.pm\fR. One setting of
+the hint bits indicates a "custom" feature bundle, which means that the
+entries in \f(CW\*(C`%^H\*(C'\fR still apply. \fIfeature.pm\fR uses that.
+.Sp
+The \f(CW\*(C`HINT_FEATURE_MASK\*(C'\fR macro is defined in \fIperl.h\fR along with other
+hints. Other macros for setting and testing features and bundles are in
+the new \fIfeature.h\fR. \f(CW\*(C`FEATURE_IS_ENABLED\*(C'\fR (which has moved to
+\&\fIfeature.h\fR) is no longer used throughout the codebase, but more specific
+macros, e.g., \f(CW\*(C`FEATURE_SAY_IS_ENABLED\*(C'\fR, that are defined in \fIfeature.h\fR.
+.IP \(bu 4
+\&\fIlib/feature.pm\fR is now a generated file, created by the new
+\&\fIregen/feature.pl\fR script, which also generates \fIfeature.h\fR.
+.IP \(bu 4
+Tied arrays are now always \f(CW\*(C`AvREAL\*(C'\fR. If \f(CW@_\fR or \f(CW\*(C`DB::args\*(C'\fR is tied, it
+is reified first, to make sure this is always the case.
+.IP \(bu 4
+Two new functions \f(CWutf8_to_uvchr_buf()\fR and \f(CWutf8_to_uvuni_buf()\fR have
+been added. These are the same as \f(CW\*(C`utf8_to_uvchr\*(C'\fR and
+\&\f(CW\*(C`utf8_to_uvuni\*(C'\fR (which are now deprecated), but take an extra parameter
+that is used to guard against reading beyond the end of the input
+string.
+See "utf8_to_uvchr_buf" in perlapi and "utf8_to_uvuni_buf" in perlapi.
+.IP \(bu 4
+The regular expression engine now does TRIE case insensitive matches
+under Unicode. This may change the output of \f(CW\*(C`use re \*(Aqdebug\*(Aq;\*(C'\fR,
+and will speed up various things.
+.IP \(bu 4
+There is a new \f(CWwrap_op_checker()\fR function, which provides a thread-safe
+alternative to writing to \f(CW\*(C`PL_check\*(C'\fR directly.
+.SH "Selected Bug Fixes"
+.IX Header "Selected Bug Fixes"
+.SS "Array and hash"
+.IX Subsection "Array and hash"
+.IP \(bu 4
+A bug has been fixed that would cause a "Use of freed value in iteration"
+error if the next two hash elements that would be iterated over are
+deleted [perl #85026]. (5.14.1)
+.IP \(bu 4
+Deleting the current hash iterator (the hash element that would be returned
+by the next call to \f(CW\*(C`each\*(C'\fR) in void context used not to free it
+[perl #85026].
+.IP \(bu 4
+Deletion of methods via \f(CW\*(C`delete $Class::{method}\*(C'\fR syntax used to update
+method caches if called in void context, but not scalar or list context.
+.IP \(bu 4
+When hash elements are deleted in void context, the internal hash entry is
+now freed before the value is freed, to prevent destructors called by that
+latter freeing from seeing the hash in an inconsistent state. It was
+possible to cause double-frees if the destructor freed the hash itself
+[perl #100340].
+.IP \(bu 4
+A \f(CW\*(C`keys\*(C'\fR optimization in Perl 5.12.0 to make it faster on empty hashes
+caused \f(CW\*(C`each\*(C'\fR not to reset the iterator if called after the last element
+was deleted.
+.IP \(bu 4
+Freeing deeply nested hashes no longer crashes [perl #44225].
+.IP \(bu 4
+It is possible from XS code to create hashes with elements that have no
+values. The hash element and slice operators used to crash
+when handling these in lvalue context. They now
+produce a "Modification of non-creatable hash value attempted" error
+message.
+.IP \(bu 4
+If list assignment to a hash or array triggered destructors that freed the
+hash or array itself, a crash would ensue. This is no longer the case
+[perl #107440].
+.IP \(bu 4
+It used to be possible to free the typeglob of a localized array or hash
+(e.g., \f(CW\*(C`local @{"x"}; delete $::{x}\*(C'\fR), resulting in a crash on scope exit.
+.IP \(bu 4
+Some core bugs affecting Hash::Util have been fixed: locking a hash
+element that is a glob copy no longer causes the next assignment to it to
+corrupt the glob (5.14.2), and unlocking a hash element that holds a
+copy-on-write scalar no longer causes modifications to that scalar to
+modify other scalars that were sharing the same string buffer.
+.SS "C API fixes"
+.IX Subsection "C API fixes"
+.IP \(bu 4
+The \f(CW\*(C`newHVhv\*(C'\fR XS function now works on tied hashes, instead of crashing or
+returning an empty hash.
+.IP \(bu 4
+The \f(CW\*(C`SvIsCOW\*(C'\fR C macro now returns false for read-only copies of typeglobs,
+such as those created by:
+.Sp
+.Vb 2
+\& $hash{elem} = *foo;
+\& Hash::Util::lock_value %hash, \*(Aqelem\*(Aq;
+.Ve
+.Sp
+It used to return true.
+.IP \(bu 4
+The \f(CW\*(C`SvPVutf8\*(C'\fR C function no longer tries to modify its argument,
+resulting in errors [perl #108994].
+.IP \(bu 4
+\&\f(CW\*(C`SvPVutf8\*(C'\fR now works properly with magical variables.
+.IP \(bu 4
+\&\f(CW\*(C`SvPVbyte\*(C'\fR now works properly non-PVs.
+.IP \(bu 4
+When presented with malformed UTF\-8 input, the XS-callable functions
+\&\f(CWis_utf8_string()\fR, \f(CWis_utf8_string_loc()\fR, and
+\&\f(CWis_utf8_string_loclen()\fR could read beyond the end of the input
+string by up to 12 bytes. This no longer happens. [perl #32080].
+However, currently, \f(CWis_utf8_char()\fR still has this defect, see
+"\fBis_utf8_char()\fR" above.
+.IP \(bu 4
+The C\-level \f(CW\*(C`pregcomp\*(C'\fR function could become confused about whether the
+pattern was in UTF8 if the pattern was an overloaded, tied, or otherwise
+magical scalar [perl #101940].
+.SS "Compile-time hints"
+.IX Subsection "Compile-time hints"
+.IP \(bu 4
+Tying \f(CW\*(C`%^H\*(C'\fR no longer causes perl to crash or ignore the contents of
+\&\f(CW\*(C`%^H\*(C'\fR when entering a compilation scope [perl #106282].
+.IP \(bu 4
+\&\f(CW\*(C`eval $string\*(C'\fR and \f(CW\*(C`require\*(C'\fR used not to
+localize \f(CW\*(C`%^H\*(C'\fR during compilation if it
+was empty at the time the \f(CW\*(C`eval\*(C'\fR call itself was compiled. This could
+lead to scary side effects, like \f(CW\*(C`use re "/m"\*(C'\fR enabling other flags that
+the surrounding code was trying to enable for its caller [perl #68750].
+.IP \(bu 4
+\&\f(CW\*(C`eval $string\*(C'\fR and \f(CW\*(C`require\*(C'\fR no longer localize hints (\f(CW$^H\fR and \f(CW\*(C`%^H\*(C'\fR)
+at run time, but only during compilation of the \f(CW$string\fR or required file.
+This makes \f(CW\*(C`BEGIN { $^H{foo}=7 }\*(C'\fR equivalent to
+\&\f(CW\*(C`BEGIN { eval \*(Aq$^H{foo}=7\*(Aq }\*(C'\fR [perl #70151].
+.IP \(bu 4
+Creating a BEGIN block from XS code (via \f(CW\*(C`newXS\*(C'\fR or \f(CW\*(C`newATTRSUB\*(C'\fR) would,
+on completion, make the hints of the current compiling code the current
+hints. This could cause warnings to occur in a non-warning scope.
+.SS "Copy-on-write scalars"
+.IX Subsection "Copy-on-write scalars"
+Copy-on-write or shared hash key scalars
+were introduced in 5.8.0, but most Perl code
+did not encounter them (they were used mostly internally). Perl
+5.10.0 extended them, such that assigning \f(CW\*(C`_\|_PACKAGE_\|_\*(C'\fR or a
+hash key to a scalar would make it copy-on-write. Several parts
+of Perl were not updated to account for them, but have now been fixed.
+.IP \(bu 4
+\&\f(CW\*(C`utf8::decode\*(C'\fR had a nasty bug that would modify copy-on-write scalars'
+string buffers in place (i.e., skipping the copy). This could result in
+hashes having two elements with the same key [perl #91834]. (5.14.2)
+.IP \(bu 4
+Lvalue subroutines were not allowing COW scalars to be returned. This was
+fixed for lvalue scalar context in Perl 5.12.3 and 5.14.0, but list context
+was not fixed until this release.
+.IP \(bu 4
+Elements of restricted hashes (see the fields pragma) containing
+copy-on-write values couldn't be deleted, nor could such hashes be cleared
+(\f(CW\*(C`%hash = ()\*(C'\fR). (5.14.2)
+.IP \(bu 4
+Localizing a tied variable used to make it read-only if it contained a
+copy-on-write string. (5.14.2)
+.IP \(bu 4
+Assigning a copy-on-write string to a stash
+element no longer causes a double free. Regardless of this change, the
+results of such assignments are still undefined.
+.IP \(bu 4
+Assigning a copy-on-write string to a tied variable no longer stops that
+variable from being tied if it happens to be a PVMG or PVLV internally.
+.IP \(bu 4
+Doing a substitution on a tied variable returning a copy-on-write
+scalar used to cause an assertion failure or an "Attempt to free
+nonexistent shared string" warning.
+.IP \(bu 4
+This one is a regression from 5.12: In 5.14.0, the bitwise assignment
+operators \f(CW\*(C`|=\*(C'\fR, \f(CW\*(C`^=\*(C'\fR and \f(CW\*(C`&=\*(C'\fR started leaving the left-hand side
+undefined if it happened to be a copy-on-write string [perl #108480].
+.IP \(bu 4
+Storable, Devel::Peek and PerlIO::scalar had similar problems.
+See "Updated Modules and Pragmata", above.
+.SS "The debugger"
+.IX Subsection "The debugger"
+.IP \(bu 4
+\&\fIdumpvar.pl\fR, and therefore the \f(CW\*(C`x\*(C'\fR command in the debugger, have been
+fixed to handle objects blessed into classes whose names contain "=". The
+contents of such objects used not to be dumped [perl #101814].
+.IP \(bu 4
+The "R" command for restarting a debugger session has been fixed to work on
+Windows, or any other system lacking a \f(CW\*(C`POSIX::_SC_OPEN_MAX\*(C'\fR constant
+[perl #87740].
+.IP \(bu 4
+The \f(CW\*(C`#line 42 foo\*(C'\fR directive used not to update the arrays of lines used
+by the debugger if it occurred in a string eval. This was partially fixed
+in 5.14, but it worked only for a single \f(CW\*(C`#line 42 foo\*(C'\fR in each eval. Now
+it works for multiple.
+.IP \(bu 4
+When subroutine calls are intercepted by the debugger, the name of the
+subroutine or a reference to it is stored in \f(CW$DB::sub\fR, for the debugger
+to access. Sometimes (such as \f(CW\*(C`$foo = *bar; undef *bar; &$foo\*(C'\fR)
+\&\f(CW$DB::sub\fR would be set to a name that could not be used to find the
+subroutine, and so the debugger's attempt to call it would fail. Now the
+check to see whether a reference is needed is more robust, so those
+problems should not happen anymore [rt.cpan.org #69862].
+.IP \(bu 4
+Every subroutine has a filename associated with it that the debugger uses.
+The one associated with constant subroutines used to be misallocated when
+cloned under threads. Consequently, debugging threaded applications could
+result in memory corruption [perl #96126].
+.SS "Dereferencing operators"
+.IX Subsection "Dereferencing operators"
+.IP \(bu 4
+\&\f(CWdefined(${"..."})\fR, \f(CWdefined(*{"..."})\fR, etc., used to
+return true for most, but not all built-in variables, if
+they had not been used yet. This bug affected \f(CW\*(C`${^GLOBAL_PHASE}\*(C'\fR and
+\&\f(CW\*(C`${^UTF8CACHE}\*(C'\fR, among others. It also used to return false if the
+package name was given as well (\f(CW\*(C`${"::!"}\*(C'\fR) [perl #97978, #97492].
+.IP \(bu 4
+Perl 5.10.0 introduced a similar bug: \f(CWdefined(*{"foo"})\fR where "foo"
+represents the name of a built-in global variable used to return false if
+the variable had never been used before, but only on the \fIfirst\fR call.
+This, too, has been fixed.
+.IP \(bu 4
+Since 5.6.0, \f(CW\*(C`*{ ... }\*(C'\fR has been inconsistent in how it treats undefined
+values. It would die in strict mode or lvalue context for most undefined
+values, but would be treated as the empty string (with a warning) for the
+specific scalar return by \f(CWundef()\fR (\f(CW&PL_sv_undef\fR internally). This
+has been corrected. \f(CWundef()\fR is now treated like other undefined
+scalars, as in Perl 5.005.
+.SS "Filehandle, last-accessed"
+.IX Subsection "Filehandle, last-accessed"
+Perl has an internal variable that stores the last filehandle to be
+accessed. It is used by \f(CW$.\fR and by \f(CW\*(C`tell\*(C'\fR and \f(CW\*(C`eof\*(C'\fR without
+arguments.
+.IP \(bu 4
+It used to be possible to set this internal variable to a glob copy and
+then modify that glob copy to be something other than a glob, and still
+have the last-accessed filehandle associated with the variable after
+assigning a glob to it again:
+.Sp
+.Vb 4
+\& my $foo = *STDOUT; # $foo is a glob copy
+\& <$foo>; # $foo is now the last\-accessed handle
+\& $foo = 3; # no longer a glob
+\& $foo = *STDERR; # still the last\-accessed handle
+.Ve
+.Sp
+Now the \f(CW\*(C`$foo = 3\*(C'\fR assignment unsets that internal variable, so there
+is no last-accessed filehandle, just as if \f(CW\*(C`<$foo>\*(C'\fR had never
+happened.
+.Sp
+This also prevents some unrelated handle from becoming the last-accessed
+handle if \f(CW$foo\fR falls out of scope and the same internal SV gets used for
+another handle [perl #97988].
+.IP \(bu 4
+A regression in 5.14 caused these statements not to set that internal
+variable:
+.Sp
+.Vb 8
+\& my $fh = *STDOUT;
+\& tell $fh;
+\& eof $fh;
+\& seek $fh, 0,0;
+\& tell *$fh;
+\& eof *$fh;
+\& seek *$fh, 0,0;
+\& readline *$fh;
+.Ve
+.Sp
+This is now fixed, but \f(CW\*(C`tell *{ *$fh }\*(C'\fR still has the problem, and it
+is not clear how to fix it [perl #106536].
+.ie n .SS "Filetests and ""stat"""
+.el .SS "Filetests and \f(CWstat\fP"
+.IX Subsection "Filetests and stat"
+The term "filetests" refers to the operators that consist of a hyphen
+followed by a single letter: \f(CW\*(C`\-r\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, \f(CW\*(C`\-M\*(C'\fR, etc. The term "stacked"
+when applied to filetests means followed by another filetest operator
+sharing the same operand, as in \f(CW\*(C`\-r \-x \-w $fooo\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`stat\*(C'\fR produces more consistent warnings. It no longer warns for "_"
+[perl #71002] and no longer skips the warning at times for other unopened
+handles. It no longer warns about an unopened handle when the operating
+system's \f(CW\*(C`fstat\*(C'\fR function fails.
+.IP \(bu 4
+\&\f(CW\*(C`stat\*(C'\fR would sometimes return negative numbers for large inode numbers,
+because it was using the wrong internal C type. [perl #84590]
+.IP \(bu 4
+\&\f(CW\*(C`lstat\*(C'\fR is documented to fall back to \f(CW\*(C`stat\*(C'\fR (with a warning) when given
+a filehandle. When passed an IO reference, it was actually doing the
+equivalent of \f(CW\*(C`stat\ _\*(C'\fR and ignoring the handle.
+.IP \(bu 4
+\&\f(CW\*(C`\-T _\*(C'\fR with no preceding \f(CW\*(C`stat\*(C'\fR used to produce a
+confusing "uninitialized" warning, even though there
+is no visible uninitialized value to speak of.
+.IP \(bu 4
+\&\f(CW\*(C`\-T\*(C'\fR, \f(CW\*(C`\-B\*(C'\fR, \f(CW\*(C`\-l\*(C'\fR and \f(CW\*(C`\-t\*(C'\fR now work
+when stacked with other filetest operators
+[perl #77388].
+.IP \(bu 4
+In 5.14.0, filetest ops (\f(CW\*(C`\-r\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, etc.) started calling FETCH on a
+tied argument belonging to the previous argument to a list operator, if
+called with a bareword argument or no argument at all. This has been
+fixed, so \f(CW\*(C`push @foo, $tied, \-r\*(C'\fR no longer calls FETCH on \f(CW$tied\fR.
+.IP \(bu 4
+In Perl 5.6, \f(CW\*(C`\-l\*(C'\fR followed by anything other than a bareword would treat
+its argument as a file name. That was changed in 5.8 for glob references
+(\f(CW\*(C`\e*foo\*(C'\fR), but not for globs themselves (\f(CW*foo\fR). \f(CW\*(C`\-l\*(C'\fR started
+returning \f(CW\*(C`undef\*(C'\fR for glob references without setting the last
+stat buffer that the "_" handle uses, but only if warnings
+were turned on. With warnings off, it was the same as 5.6.
+In other words, it was simply buggy and inconsistent. Now the 5.6
+behavior has been restored.
+.IP \(bu 4
+\&\f(CW\*(C`\-l\*(C'\fR followed by a bareword no longer "eats" the previous argument to
+the list operator in whose argument list it resides. Hence,
+\&\f(CW\*(C`print "bar", \-l foo\*(C'\fR now actually prints "bar", because \f(CW\*(C`\-l\*(C'\fR
+on longer eats it.
+.IP \(bu 4
+Perl keeps several internal variables to keep track of the last stat
+buffer, from which file(handle) it originated, what type it was, and
+whether the last stat succeeded.
+.Sp
+There were various cases where these could get out of synch, resulting in
+inconsistent or erratic behavior in edge cases (every mention of \f(CW\*(C`\-T\*(C'\fR
+applies to \f(CW\*(C`\-B\*(C'\fR as well):
+.RS 4
+.IP \(bu 4
+\&\f(CW\*(C`\-T \fR\f(CIHANDLE\fR\f(CW\*(C'\fR, even though it does a \f(CW\*(C`stat\*(C'\fR, was not resetting the last
+stat type, so an \f(CW\*(C`lstat _\*(C'\fR following it would merrily return the wrong
+results. Also, it was not setting the success status.
+.IP \(bu 4
+Freeing the handle last used by \f(CW\*(C`stat\*(C'\fR or a filetest could result in
+\&\f(CW\*(C`\-T\ _\*(C'\fR using an unrelated handle.
+.IP \(bu 4
+\&\f(CW\*(C`stat\*(C'\fR with an IO reference would not reset the stat type or record the
+filehandle for \f(CW\*(C`\-T\ _\*(C'\fR to use.
+.IP \(bu 4
+Fatal warnings could cause the stat buffer not to be reset
+for a filetest operator on an unopened filehandle or \f(CW\*(C`\-l\*(C'\fR on any handle.
+Fatal warnings also stopped \f(CW\*(C`\-T\*(C'\fR from setting \f(CW$!\fR.
+.IP \(bu 4
+When the last stat was on an unreadable file, \f(CW\*(C`\-T _\*(C'\fR is supposed to
+return \f(CW\*(C`undef\*(C'\fR, leaving the last stat buffer unchanged. But it was
+setting the stat type, causing \f(CW\*(C`lstat _\*(C'\fR to stop working.
+.IP \(bu 4
+\&\f(CW\*(C`\-T \fR\f(CIFILENAME\fR\f(CW\*(C'\fR was not resetting the internal stat buffers for
+unreadable files.
+.RE
+.RS 4
+.Sp
+These have all been fixed.
+.RE
+.SS Formats
+.IX Subsection "Formats"
+.IP \(bu 4
+Several edge cases have been fixed with formats and \f(CW\*(C`formline\*(C'\fR;
+in particular, where the format itself is potentially variable (such as
+with ties and overloading), and where the format and data differ in their
+encoding. In both these cases, it used to possible for the output to be
+corrupted [perl #91032].
+.IP \(bu 4
+\&\f(CW\*(C`formline\*(C'\fR no longer converts its argument into a string in-place. So
+passing a reference to \f(CW\*(C`formline\*(C'\fR no longer destroys the reference
+[perl #79532].
+.IP \(bu 4
+Assignment to \f(CW$^A\fR (the format output accumulator) now recalculates
+the number of lines output.
+.ie n .SS """given"" and ""when"""
+.el .SS "\f(CWgiven\fP and \f(CWwhen\fP"
+.IX Subsection "given and when"
+.IP \(bu 4
+\&\f(CW\*(C`given\*(C'\fR was not scoping its implicit \f(CW$_\fR properly, resulting in memory
+leaks or "Variable is not available" warnings [perl #94682].
+.IP \(bu 4
+\&\f(CW\*(C`given\*(C'\fR was not calling set-magic on the implicit lexical \f(CW$_\fR that it
+uses. This meant, for example, that \f(CW\*(C`pos\*(C'\fR would be remembered from one
+execution of the same \f(CW\*(C`given\*(C'\fR block to the next, even if the input were a
+different variable [perl #84526].
+.IP \(bu 4
+\&\f(CW\*(C`when\*(C'\fR blocks are now capable of returning variables declared inside the
+enclosing \f(CW\*(C`given\*(C'\fR block [perl #93548].
+.ie n .SS "The ""glob"" operator"
+.el .SS "The \f(CWglob\fP operator"
+.IX Subsection "The glob operator"
+.IP \(bu 4
+On OSes other than VMS, Perl's \f(CW\*(C`glob\*(C'\fR operator (and the \f(CW\*(C`<...>\*(C'\fR form)
+use File::Glob underneath. File::Glob splits the pattern into words,
+before feeding each word to its \f(CW\*(C`bsd_glob\*(C'\fR function.
+.Sp
+There were several inconsistencies in the way the split was done. Now
+quotation marks (' and ") are always treated as shell-style word delimiters
+(that allow whitespace as part of a word) and backslashes are always
+preserved, unless they exist to escape quotation marks. Before, those
+would only sometimes be the case, depending on whether the pattern
+contained whitespace. Also, escaped whitespace at the end of the pattern
+is no longer stripped [perl #40470].
+.IP \(bu 4
+\&\f(CW\*(C`CORE::glob\*(C'\fR now works as a way to call the default globbing function. It
+used to respect overrides, despite the \f(CW\*(C`CORE::\*(C'\fR prefix.
+.IP \(bu 4
+Under miniperl (used to configure modules when perl itself is built),
+\&\f(CW\*(C`glob\*(C'\fR now clears \f(CW%ENV\fR before calling csh, since the latter croaks on some
+systems if it does not like the contents of the LS_COLORS environment
+variable [perl #98662].
+.SS "Lvalue subroutines"
+.IX Subsection "Lvalue subroutines"
+.IP \(bu 4
+Explicit return now returns the actual argument passed to return, instead
+of copying it [perl #72724, #72706].
+.IP \(bu 4
+Lvalue subroutines used to enforce lvalue syntax (i.e., whatever can go on
+the left-hand side of \f(CW\*(C`=\*(C'\fR) for the last statement and the arguments to
+return. Since lvalue subroutines are not always called in lvalue context,
+this restriction has been lifted.
+.IP \(bu 4
+Lvalue subroutines are less restrictive about what values can be returned.
+It used to croak on values returned by \f(CW\*(C`shift\*(C'\fR and \f(CW\*(C`delete\*(C'\fR and from
+other subroutines, but no longer does so [perl #71172].
+.IP \(bu 4
+Empty lvalue subroutines (\f(CW\*(C`sub :lvalue {}\*(C'\fR) used to return \f(CW@_\fR in list
+context. All subroutines used to do this, but regular subs were fixed in
+Perl 5.8.2. Now lvalue subroutines have been likewise fixed.
+.IP \(bu 4
+Autovivification now works on values returned from lvalue subroutines
+[perl #7946], as does returning \f(CW\*(C`keys\*(C'\fR in lvalue context.
+.IP \(bu 4
+Lvalue subroutines used to copy their return values in rvalue context. Not
+only was this a waste of CPU cycles, but it also caused bugs. A \f(CW\*(C`($)\*(C'\fR
+prototype would cause an lvalue sub to copy its return value [perl #51408],
+and \f(CW\*(C`while(lvalue_sub() =~ m/.../g) { ... }\*(C'\fR would loop endlessly
+[perl #78680].
+.IP \(bu 4
+When called in potential lvalue context
+(e.g., subroutine arguments or a list
+passed to \f(CW\*(C`for\*(C'\fR), lvalue subroutines used to copy
+any read-only value that was returned. E.g., \f(CW\*(C` sub :lvalue { $] } \*(C'\fR
+would not return \f(CW$]\fR, but a copy of it.
+.IP \(bu 4
+When called in potential lvalue context, an lvalue subroutine returning
+arrays or hashes used to bind the arrays or hashes to scalar variables,
+resulting in bugs. This was fixed in 5.14.0 if an array were the first
+thing returned from the subroutine (but not for \f(CW\*(C`$scalar, @array\*(C'\fR or
+hashes being returned). Now a more general fix has been applied
+[perl #23790].
+.IP \(bu 4
+Method calls whose arguments were all surrounded with \f(CWmy()\fR or \f(CWour()\fR
+(as in \f(CW\*(C`$object\->method(my($a,$b))\*(C'\fR) used to force lvalue context on
+the subroutine. This would prevent lvalue methods from returning certain
+values.
+.IP \(bu 4
+Lvalue sub calls that are not determined to be such at compile time
+(\f(CW&$name\fR or &{"name"}) are no longer exempt from strict refs if they
+occur in the last statement of an lvalue subroutine [perl #102486].
+.IP \(bu 4
+Sub calls whose subs are not visible at compile time, if
+they occurred in the last statement of an lvalue subroutine,
+would reject non-lvalue subroutines and die with "Can't modify non-lvalue
+subroutine call" [perl #102486].
+.Sp
+Non-lvalue sub calls whose subs \fIare\fR visible at compile time exhibited
+the opposite bug. If the call occurred in the last statement of an lvalue
+subroutine, there would be no error when the lvalue sub was called in
+lvalue context. Perl would blindly assign to the temporary value returned
+by the non-lvalue subroutine.
+.IP \(bu 4
+\&\f(CW\*(C`AUTOLOAD\*(C'\fR routines used to take precedence over the actual sub being
+called (i.e., when autoloading wasn't needed), for sub calls in lvalue or
+potential lvalue context, if the subroutine was not visible at compile
+time.
+.IP \(bu 4
+Applying the \f(CW\*(C`:lvalue\*(C'\fR attribute to an XSUB or to an aliased subroutine
+stub with \f(CW\*(C`sub foo :lvalue;\*(C'\fR syntax stopped working in Perl 5.12.
+This has been fixed.
+.IP \(bu 4
+Applying the :lvalue attribute to subroutine that is already defined does
+not work properly, as the attribute changes the way the sub is compiled.
+Hence, Perl 5.12 began warning when an attempt is made to apply the
+attribute to an already defined sub. In such cases, the attribute is
+discarded.
+.Sp
+But the change in 5.12 missed the case where custom attributes are also
+present: that case still silently and ineffectively applied the attribute.
+That omission has now been corrected. \f(CW\*(C`sub foo :lvalue :Whatever\*(C'\fR (when
+\&\f(CW\*(C`foo\*(C'\fR is already defined) now warns about the :lvalue attribute, and does
+not apply it.
+.IP \(bu 4
+A bug affecting lvalue context propagation through nested lvalue subroutine
+calls has been fixed. Previously, returning a value in nested rvalue
+context would be treated as lvalue context by the inner subroutine call,
+resulting in some values (such as read-only values) being rejected.
+.SS Overloading
+.IX Subsection "Overloading"
+.IP \(bu 4
+Arithmetic assignment (\f(CW\*(C`$left += $right\*(C'\fR) involving overloaded objects
+that rely on the 'nomethod' override no longer segfault when the left
+operand is not overloaded.
+.IP \(bu 4
+Errors that occur when methods cannot be found during overloading now
+mention the correct package name, as they did in 5.8.x, instead of
+erroneously mentioning the "overload" package, as they have since 5.10.0.
+.IP \(bu 4
+Undefining \f(CW%overload::\fR no longer causes a crash.
+.SS "Prototypes of built-in keywords"
+.IX Subsection "Prototypes of built-in keywords"
+.IP \(bu 4
+The \f(CW\*(C`prototype\*(C'\fR function no longer dies for the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, \f(CW\*(C`_\|_LINE_\|_\*(C'\fR
+and \f(CW\*(C`_\|_PACKAGE_\|_\*(C'\fR directives. It now returns an empty-string prototype
+for them, because they are syntactically indistinguishable from nullary
+functions like \f(CW\*(C`time\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`prototype\*(C'\fR now returns \f(CW\*(C`undef\*(C'\fR for all overridable infix operators,
+such as \f(CW\*(C`eq\*(C'\fR, which are not callable in any way resembling functions.
+It used to return incorrect prototypes for some and die for others
+[perl #94984].
+.IP \(bu 4
+The prototypes of several built-in functions\-\-\f(CW\*(C`getprotobynumber\*(C'\fR, \f(CW\*(C`lock\*(C'\fR,
+\&\f(CW\*(C`not\*(C'\fR and \f(CW\*(C`select\*(C'\fR\-\-have been corrected, or at least are now closer to
+reality than before.
+.SS "Regular expressions"
+.IX Subsection "Regular expressions"
+.IP \(bu 4
+\&\f(CW\*(C`/[[:ascii:]]/\*(C'\fR and \f(CW\*(C`/[[:blank:]]/\*(C'\fR now use locale rules under
+\&\f(CW\*(C`use locale\*(C'\fR when the platform supports that. Previously, they used
+the platform's native character set.
+.IP \(bu 4
+\&\f(CW\*(C`m/[[:ascii:]]/i\*(C'\fR and \f(CW\*(C`/\ep{ASCII}/i\*(C'\fR now match identically (when not
+under a differing locale). This fixes a regression introduced in 5.14
+in which the first expression could match characters outside of ASCII,
+such as the KELVIN SIGN.
+.IP \(bu 4
+\&\f(CW\*(C`/.*/g\*(C'\fR would sometimes refuse to match at the end of a string that ends
+with "\en". This has been fixed [perl #109206].
+.IP \(bu 4
+Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
+after assigning \f(CW\*(C`${ qr// }\*(C'\fR to a hash element and locking it with
+Hash::Util. This could result in double frees, crashes, or erratic
+behavior.
+.IP \(bu 4
+The new (in 5.14.0) regular expression modifier \f(CW\*(C`/a\*(C'\fR when repeated like
+\&\f(CW\*(C`/aa\*(C'\fR forbids the characters outside the ASCII range that match
+characters inside that range from matching under \f(CW\*(C`/i\*(C'\fR. This did not
+work under some circumstances, all involving alternation, such as:
+.Sp
+.Vb 1
+\& "\eN{KELVIN SIGN}" =~ /k|foo/iaa;
+.Ve
+.Sp
+succeeded inappropriately. This is now fixed.
+.IP \(bu 4
+5.14.0 introduced some memory leaks in regular expression character
+classes such as \f(CW\*(C`[\ew\es]\*(C'\fR, which have now been fixed. (5.14.1)
+.IP \(bu 4
+An edge case in regular expression matching could potentially loop.
+This happened only under \f(CW\*(C`/i\*(C'\fR in bracketed character classes that have
+characters with multi-character folds, and the target string to match
+against includes the first portion of the fold, followed by another
+character that has a multi-character fold that begins with the remaining
+portion of the fold, plus some more.
+.Sp
+.Vb 1
+\& "s\eN{U+DF}" =~ /[\ex{DF}foo]/i
+.Ve
+.Sp
+is one such case. \f(CW\*(C`\exDF\*(C'\fR folds to \f(CW"ss"\fR. (5.14.1)
+.IP \(bu 4
+A few characters in regular expression pattern matches did not
+match correctly in some circumstances, all involving \f(CW\*(C`/i\*(C'\fR. The
+affected characters are:
+COMBINING GREEK YPOGEGRAMMENI,
+GREEK CAPITAL LETTER IOTA,
+GREEK CAPITAL LETTER UPSILON,
+GREEK PROSGEGRAMMENI,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA,
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+LATIN SMALL LETTER LONG S,
+LATIN SMALL LIGATURE LONG S T,
+and
+LATIN SMALL LIGATURE ST.
+.IP \(bu 4
+A memory leak regression in regular expression compilation
+under threading has been fixed.
+.IP \(bu 4
+A regression introduced in 5.14.0 has
+been fixed. This involved an inverted
+bracketed character class in a regular expression that consisted solely
+of a Unicode property. That property wasn't getting inverted outside the
+Latin1 range.
+.IP \(bu 4
+Three problematic Unicode characters now work better in regex pattern matching under \f(CW\*(C`/i\*(C'\fR.
+.Sp
+In the past, three Unicode characters:
+LATIN SMALL LETTER SHARP S,
+GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS,
+and
+GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS,
+along with the sequences that they fold to
+(including "ss" for LATIN SMALL LETTER SHARP S),
+did not properly match under \f(CW\*(C`/i\*(C'\fR. 5.14.0 fixed some of these cases,
+but introduced others, including a panic when one of the characters or
+sequences was used in the \f(CW\*(C`(?(DEFINE)\*(C'\fR regular expression predicate.
+The known bugs that were introduced in 5.14 have now been fixed; as well
+as some other edge cases that have never worked until now. These all
+involve using the characters and sequences outside bracketed character
+classes under \f(CW\*(C`/i\*(C'\fR. This closes [perl #98546].
+.Sp
+There remain known problems when using certain characters with
+multi-character folds inside bracketed character classes, including such
+constructs as \f(CW\*(C`qr/[\eN{LATIN SMALL LETTER SHARP}a\-z]/i\*(C'\fR. These
+remaining bugs are addressed in [perl #89774].
+.IP \(bu 4
+RT #78266: The regex engine has been leaking memory when accessing
+named captures that weren't matched as part of a regex ever since 5.10
+when they were introduced; e.g., this would consume over a hundred MB of
+memory:
+.Sp
+.Vb 6
+\& for (1..10_000_000) {
+\& if ("foo" =~ /(foo|(?<capture>bar))?/) {
+\& my $capture = $+{capture}
+\& }
+\& }
+\& system "ps \-o rss $$"\*(Aq
+.Ve
+.IP \(bu 4
+In 5.14, \f(CW\*(C`/[[:lower:]]/i\*(C'\fR and \f(CW\*(C`/[[:upper:]]/i\*(C'\fR no longer matched the
+opposite case. This has been fixed [perl #101970].
+.IP \(bu 4
+A regular expression match with an overloaded object on the right-hand side
+would sometimes stringify the object too many times.
+.IP \(bu 4
+A regression has been fixed that was introduced in 5.14, in \f(CW\*(C`/i\*(C'\fR
+regular expression matching, in which a match improperly fails if the
+pattern is in UTF\-8, the target string is not, and a Latin\-1 character
+precedes a character in the string that should match the pattern.
+[perl #101710]
+.IP \(bu 4
+In case-insensitive regular expression pattern matching, no longer on
+UTF\-8 encoded strings does the scan for the start of match look only at
+the first possible position. This caused matches such as
+\&\f(CW\*(C`"f\ex{FB00}" =~ /ff/i\*(C'\fR to fail.
+.IP \(bu 4
+The regexp optimizer no longer crashes on debugging builds when merging
+fixed-string nodes with inconvenient contents.
+.IP \(bu 4
+A panic involving the combination of the regular expression modifiers
+\&\f(CW\*(C`/aa\*(C'\fR and the \f(CW\*(C`\eb\*(C'\fR escape sequence introduced in 5.14.0 has been
+fixed [perl #95964]. (5.14.2)
+.IP \(bu 4
+The combination of the regular expression modifiers \f(CW\*(C`/aa\*(C'\fR and the \f(CW\*(C`\eb\*(C'\fR
+and \f(CW\*(C`\eB\*(C'\fR escape sequences did not work properly on UTF\-8 encoded
+strings. All non-ASCII characters under \f(CW\*(C`/aa\*(C'\fR should be treated as
+non-word characters, but what was happening was that Unicode rules were
+used to determine wordness/non\-wordness for non-ASCII characters. This
+is now fixed [perl #95968].
+.IP \(bu 4
+\&\f(CW\*(C`(?foo: ...)\*(C'\fR no longer loses passed in character set.
+.IP \(bu 4
+The trie optimization used to have problems with alternations containing
+an empty \f(CW\*(C`(?:)\*(C'\fR, causing \f(CW\*(C`"x" =~ /\eA(?>(?:(?:)A|B|C?x))\ez/\*(C'\fR not to
+match, whereas it should [perl #111842].
+.IP \(bu 4
+Use of lexical (\f(CW\*(C`my\*(C'\fR) variables in code blocks embedded in regular
+expressions will no longer result in memory corruption or crashes.
+.Sp
+Nevertheless, these code blocks are still experimental, as there are still
+problems with the wrong variables being closed over (in loops for instance)
+and with abnormal exiting (e.g., \f(CW\*(C`die\*(C'\fR) causing memory corruption.
+.IP \(bu 4
+The \f(CW\*(C`\eh\*(C'\fR, \f(CW\*(C`\eH\*(C'\fR, \f(CW\*(C`\ev\*(C'\fR and \f(CW\*(C`\eV\*(C'\fR regular expression metacharacters used to
+cause a panic error message when trying to match at the end of the
+string [perl #96354].
+.IP \(bu 4
+The abbreviations for four C1 control characters \f(CW\*(C`MW\*(C'\fR \f(CW\*(C`PM\*(C'\fR, \f(CW\*(C`RI\*(C'\fR, and
+\&\f(CW\*(C`ST\*(C'\fR were previously unrecognized by \f(CW\*(C`\eN{}\*(C'\fR, \fBvianame()\fR, and
+\&\fBstring_vianame()\fR.
+.IP \(bu 4
+Mentioning a variable named "&" other than \f(CW$&\fR (i.e., \f(CW\*(C`@&\*(C'\fR or \f(CW\*(C`%&\*(C'\fR) no
+longer stops \f(CW$&\fR from working. The same applies to variables named "'"
+and "`" [perl #24237].
+.IP \(bu 4
+Creating a \f(CW\*(C`UNIVERSAL::AUTOLOAD\*(C'\fR sub no longer stops \f(CW\*(C`%+\*(C'\fR, \f(CW\*(C`%\-\*(C'\fR and
+\&\f(CW\*(C`%!\*(C'\fR from working some of the time [perl #105024].
+.SS Smartmatching
+.IX Subsection "Smartmatching"
+.IP \(bu 4
+\&\f(CW\*(C`~~\*(C'\fR now correctly handles the precedence of Any~~Object, and is not tricked
+by an overloaded object on the left-hand side.
+.IP \(bu 4
+In Perl 5.14.0, \f(CW\*(C`$tainted ~~ @array\*(C'\fR stopped working properly. Sometimes
+it would erroneously fail (when \f(CW$tainted\fR contained a string that occurs
+in the array \fIafter\fR the first element) or erroneously succeed (when
+\&\f(CW\*(C`undef\*(C'\fR occurred after the first element) [perl #93590].
+.ie n .SS "The ""sort"" operator"
+.el .SS "The \f(CWsort\fP operator"
+.IX Subsection "The sort operator"
+.IP \(bu 4
+\&\f(CW\*(C`sort\*(C'\fR was not treating \f(CW\*(C`sub {}\*(C'\fR and \f(CW\*(C`sub {()}\*(C'\fR as equivalent when
+such a sub was provided as the comparison routine. It used to croak on
+\&\f(CW\*(C`sub {()}\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`sort\*(C'\fR now works once more with custom sort routines that are XSUBs. It
+stopped working in 5.10.0.
+.IP \(bu 4
+\&\f(CW\*(C`sort\*(C'\fR with a constant for a custom sort routine, although it produces
+unsorted results, no longer crashes. It started crashing in 5.10.0.
+.IP \(bu 4
+Warnings emitted by \f(CW\*(C`sort\*(C'\fR when a custom comparison routine returns a
+non-numeric value now contain "in sort" and show the line number of the
+\&\f(CW\*(C`sort\*(C'\fR operator, rather than the last line of the comparison routine. The
+warnings also now occur only if warnings are enabled in the scope where
+\&\f(CW\*(C`sort\*(C'\fR occurs. Previously the warnings would occur if enabled in the
+comparison routine's scope.
+.IP \(bu 4
+\&\f(CW\*(C`sort { $a <=> $b }\*(C'\fR, which is optimized internally, now produces
+"uninitialized" warnings for NaNs (not-a-number values), since \f(CW\*(C`<=>\*(C'\fR
+returns \f(CW\*(C`undef\*(C'\fR for those. This brings it in line with
+\&\f(CW\*(C`sort\ {\ 1;\ $a\ <=>\ $b\ }\*(C'\fR and other more complex cases, which are not
+optimized [perl #94390].
+.ie n .SS "The ""substr"" operator"
+.el .SS "The \f(CWsubstr\fP operator"
+.IX Subsection "The substr operator"
+.IP \(bu 4
+Tied (and otherwise magical) variables are no longer exempt from the
+"Attempt to use reference as lvalue in substr" warning.
+.IP \(bu 4
+That warning now occurs when the returned lvalue is assigned to, not
+when \f(CW\*(C`substr\*(C'\fR itself is called. This makes a difference only if the
+return value of \f(CW\*(C`substr\*(C'\fR is referenced and later assigned to.
+.IP \(bu 4
+Passing a substring of a read-only value or a typeglob to a function
+(potential lvalue context) no longer causes an immediate "Can't coerce"
+or "Modification of a read-only value" error. That error occurs only
+if the passed value is assigned to.
+.Sp
+The same thing happens with the "substr outside of string" error. If
+the lvalue is only read from, not written to, it is now just a warning, as
+with rvalue \f(CW\*(C`substr\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`substr\*(C'\fR assignments no longer call FETCH twice if the first argument
+is a tied variable, just once.
+.SS "Support for embedded nulls"
+.IX Subsection "Support for embedded nulls"
+Some parts of Perl did not work correctly with nulls (\f(CW\*(C`chr 0\*(C'\fR) embedded in
+strings. That meant that, for instance, \f(CW\*(C`$m = "a\e0b"; foo\->$m\*(C'\fR would
+call the "a" method, instead of the actual method name contained in \f(CW$m\fR.
+These parts of perl have been fixed to support nulls:
+.IP \(bu 4
+Method names
+.IP \(bu 4
+Typeglob names (including filehandle and subroutine names)
+.IP \(bu 4
+Package names, including the return value of \f(CWref()\fR
+.IP \(bu 4
+Typeglob elements (\f(CW*foo{"THING\e0stuff"}\fR)
+.IP \(bu 4
+Signal names
+.IP \(bu 4
+Various warnings and error messages that mention variable names or values,
+methods, etc.
+.PP
+One side effect of these changes is that blessing into "\e0" no longer
+causes \f(CWref()\fR to return false.
+.SS "Threading bugs"
+.IX Subsection "Threading bugs"
+.IP \(bu 4
+Typeglobs returned from threads are no longer cloned if the parent thread
+already has a glob with the same name. This means that returned
+subroutines will now assign to the right package variables [perl #107366].
+.IP \(bu 4
+Some cases of threads crashing due to memory allocation during cloning have
+been fixed [perl #90006].
+.IP \(bu 4
+Thread joining would sometimes emit "Attempt to free unreferenced scalar"
+warnings if \f(CW\*(C`caller\*(C'\fR had been used from the \f(CW\*(C`DB\*(C'\fR package before thread
+creation [perl #98092].
+.IP \(bu 4
+Locking a subroutine (via \f(CW\*(C`lock &sub\*(C'\fR) is no longer a compile-time error
+for regular subs. For lvalue subroutines, it no longer tries to return the
+sub as a scalar, resulting in strange side effects like \f(CW\*(C`ref \e$_\*(C'\fR
+returning "CODE" in some instances.
+.Sp
+\&\f(CW\*(C`lock &sub\*(C'\fR is now a run-time error if threads::shared is loaded (a
+no-op otherwise), but that may be rectified in a future version.
+.SS "Tied variables"
+.IX Subsection "Tied variables"
+.IP \(bu 4
+Various cases in which FETCH was being ignored or called too many times
+have been fixed:
+.RS 4
+.IP \(bu 4
+\&\f(CW\*(C`PerlIO::get_layers\*(C'\fR [perl #97956]
+.IP \(bu 4
+\&\f(CW\*(C`$tied =~ y/a/b/\*(C'\fR, \f(CW\*(C`chop $tied\*(C'\fR and \f(CW\*(C`chomp $tied\*(C'\fR when \f(CW$tied\fR holds a
+reference.
+.IP \(bu 4
+When calling \f(CW\*(C`local $_\*(C'\fR [perl #105912]
+.IP \(bu 4
+Four-argument \f(CW\*(C`select\*(C'\fR
+.IP \(bu 4
+A tied buffer passed to \f(CW\*(C`sysread\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`$tied .= <>\*(C'\fR
+.IP \(bu 4
+Three-argument \f(CW\*(C`open\*(C'\fR, the third being a tied file handle
+(as in \f(CW\*(C`open $fh, ">&", $tied\*(C'\fR)
+.IP \(bu 4
+\&\f(CW\*(C`sort\*(C'\fR with a reference to a tied glob for the comparison routine.
+.IP \(bu 4
+\&\f(CW\*(C`..\*(C'\fR and \f(CW\*(C`...\*(C'\fR in list context [perl #53554].
+.IP \(bu 4
+\&\f(CW\*(C`${$tied}\*(C'\fR, \f(CW\*(C`@{$tied}\*(C'\fR, \f(CW\*(C`%{$tied}\*(C'\fR and \f(CW\*(C`*{$tied}\*(C'\fR where the tied
+variable returns a string (\f(CW\*(C`&{}\*(C'\fR was unaffected)
+.IP \(bu 4
+\&\f(CW\*(C`defined ${ $tied_variable }\*(C'\fR
+.IP \(bu 4
+Various functions that take a filehandle argument in rvalue context
+(\f(CW\*(C`close\*(C'\fR, \f(CW\*(C`readline\*(C'\fR, etc.) [perl #97482]
+.IP \(bu 4
+Some cases of dereferencing a complex expression, such as
+\&\f(CW\*(C`${ (), $tied } = 1\*(C'\fR, used to call \f(CW\*(C`FETCH\*(C'\fR multiple times, but now call
+it once.
+.IP \(bu 4
+\&\f(CW\*(C`$tied\->method\*(C'\fR where \f(CW$tied\fR returns a package name\-\-even resulting in
+a failure to call the method, due to memory corruption
+.IP \(bu 4
+Assignments like \f(CW\*(C`*$tied = \e&{"..."}\*(C'\fR and \f(CW\*(C`*glob = $tied\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`chdir\*(C'\fR, \f(CW\*(C`chmod\*(C'\fR, \f(CW\*(C`chown\*(C'\fR, \f(CW\*(C`utime\*(C'\fR, \f(CW\*(C`truncate\*(C'\fR, \f(CW\*(C`stat\*(C'\fR, \f(CW\*(C`lstat\*(C'\fR and
+the filetest ops (\f(CW\*(C`\-r\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, etc.)
+.RE
+.RS 4
+.RE
+.IP \(bu 4
+\&\f(CW\*(C`caller\*(C'\fR sets \f(CW@DB::args\fR to the subroutine arguments when called from
+the DB package. It used to crash when doing so if \f(CW@DB::args\fR happened to
+be tied. Now it croaks instead.
+.IP \(bu 4
+Tying an element of \f(CW%ENV\fR or \f(CW\*(C`%^H\*(C'\fR and then deleting that element would
+result in a call to the tie object's DELETE method, even though tying the
+element itself is supposed to be equivalent to tying a scalar (the element
+is, of course, a scalar) [perl #67490].
+.IP \(bu 4
+When Perl autovivifies an element of a tied array or hash (which entails
+calling STORE with a new reference), it now calls FETCH immediately after
+the STORE, instead of assuming that FETCH would have returned the same
+reference. This can make it easier to implement tied objects [perl #35865, #43011].
+.IP \(bu 4
+Four-argument \f(CW\*(C`select\*(C'\fR no longer produces its "Non-string passed as
+bitmask" warning on tied or tainted variables that are strings.
+.IP \(bu 4
+Localizing a tied scalar that returns a typeglob no longer stops it from
+being tied till the end of the scope.
+.IP \(bu 4
+Attempting to \f(CW\*(C`goto\*(C'\fR out of a tied handle method used to cause memory
+corruption or crashes. Now it produces an error message instead
+[perl #8611].
+.IP \(bu 4
+A bug has been fixed that occurs when a tied variable is used as a
+subroutine reference: if the last thing assigned to or returned from the
+variable was a reference or typeglob, the \f(CW\*(C`\e&$tied\*(C'\fR could either crash or
+return the wrong subroutine. The reference case is a regression introduced
+in Perl 5.10.0. For typeglobs, it has probably never worked till now.
+.SS "Version objects and vstrings"
+.IX Subsection "Version objects and vstrings"
+.IP \(bu 4
+The bitwise complement operator (and possibly other operators, too) when
+passed a vstring would leave vstring magic attached to the return value,
+even though the string had changed. This meant that
+\&\f(CW\*(C`version\->new(~v1.2.3)\*(C'\fR would create a version looking like "v1.2.3"
+even though the string passed to \f(CW\*(C`version\->new\*(C'\fR was actually
+"\e376\e375\e374". This also caused B::Deparse to deparse \f(CW\*(C`~v1.2.3\*(C'\fR
+incorrectly, without the \f(CW\*(C`~\*(C'\fR [perl #29070].
+.IP \(bu 4
+Assigning a vstring to a magic (e.g., tied, \f(CW$!\fR) variable and then
+assigning something else used to blow away all magic. This meant that
+tied variables would come undone, \f(CW$!\fR would stop getting updated on
+failed system calls, \f(CW$|\fR would stop setting autoflush, and other
+mischief would take place. This has been fixed.
+.IP \(bu 4
+\&\f(CW\*(C`version\->new("version")\*(C'\fR and \f(CW\*(C`printf "%vd", "version"\*(C'\fR no longer
+crash [perl #102586].
+.IP \(bu 4
+Version comparisons, such as those that happen implicitly with \f(CW\*(C`use
+v5.43\*(C'\fR, no longer cause locale settings to change [perl #105784].
+.IP \(bu 4
+Version objects no longer cause memory leaks in boolean context
+[perl #109762].
+.SS "Warnings, redefinition"
+.IX Subsection "Warnings, redefinition"
+.IP \(bu 4
+Subroutines from the \f(CW\*(C`autouse\*(C'\fR namespace are once more exempt from
+redefinition warnings. This used to work in 5.005, but was broken in
+5.6 for most subroutines. For subs created via XS that redefine
+subroutines from the \f(CW\*(C`autouse\*(C'\fR package, this stopped working in 5.10.
+.IP \(bu 4
+New XSUBs now produce redefinition warnings if they overwrite existing
+subs, as they did in 5.8.x. (The \f(CW\*(C`autouse\*(C'\fR logic was reversed in
+5.10\-14. Only subroutines from the \f(CW\*(C`autouse\*(C'\fR namespace would warn
+when clobbered.)
+.IP \(bu 4
+\&\f(CW\*(C`newCONSTSUB\*(C'\fR used to use compile-time warning hints, instead of
+run-time hints. The following code should never produce a redefinition
+warning, but it used to, if \f(CW\*(C`newCONSTSUB\*(C'\fR redefined an existing
+subroutine:
+.Sp
+.Vb 5
+\& use warnings;
+\& BEGIN {
+\& no warnings;
+\& some_XS_function_that_calls_new_CONSTSUB();
+\& }
+.Ve
+.IP \(bu 4
+Redefinition warnings for constant subroutines are on by default (what
+are known as severe warnings in perldiag). This occurred only
+when it was a glob assignment or declaration of a Perl subroutine that
+caused the warning. If the creation of XSUBs triggered the warning, it
+was not a default warning. This has been corrected.
+.IP \(bu 4
+The internal check to see whether a redefinition warning should occur
+used to emit "uninitialized" warnings in cases like this:
+.Sp
+.Vb 4
+\& use warnings "uninitialized";
+\& use constant {u => undef, v => undef};
+\& sub foo(){u}
+\& sub foo(){v}
+.Ve
+.SS "Warnings, ""Uninitialized"""
+.IX Subsection "Warnings, ""Uninitialized"""
+.IP \(bu 4
+Various functions that take a filehandle argument in rvalue context
+(\f(CW\*(C`close\*(C'\fR, \f(CW\*(C`readline\*(C'\fR, etc.) used to warn twice for an undefined handle
+[perl #97482].
+.IP \(bu 4
+\&\f(CW\*(C`dbmopen\*(C'\fR now only warns once, rather than three times, if the mode
+argument is \f(CW\*(C`undef\*(C'\fR [perl #90064].
+.IP \(bu 4
+The \f(CW\*(C`+=\*(C'\fR operator does not usually warn when the left-hand side is
+\&\f(CW\*(C`undef\*(C'\fR, but it was doing so for tied variables. This has been fixed
+[perl #44895].
+.IP \(bu 4
+A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
+warnings to report the wrong variable if the operator in question had
+two operands and one was \f(CW\*(C`%{...}\*(C'\fR or \f(CW\*(C`@{...}\*(C'\fR. This has been fixed
+[perl #103766].
+.IP \(bu 4
+\&\f(CW\*(C`..\*(C'\fR and \f(CW\*(C`...\*(C'\fR in list context now mention the name of the variable in
+"uninitialized" warnings for string (as opposed to numeric) ranges.
+.SS "Weak references"
+.IX Subsection "Weak references"
+.IP \(bu 4
+Weakening the first argument to an automatically-invoked \f(CW\*(C`DESTROY\*(C'\fR method
+could result in erroneous "DESTROY created new reference" errors or
+crashes. Now it is an error to weaken a read-only reference.
+.IP \(bu 4
+Weak references to lexical hashes going out of scope were not going stale
+(becoming undefined), but continued to point to the hash.
+.IP \(bu 4
+Weak references to lexical variables going out of scope are now broken
+before any magical methods (e.g., DESTROY on a tie object) are called.
+This prevents such methods from modifying the variable that will be seen
+the next time the scope is entered.
+.IP \(bu 4
+Creating a weak reference to an \f(CW@ISA\fR array or accessing the array index
+(\f(CW$#ISA\fR) could result in confused internal bookkeeping for elements
+later added to the \f(CW@ISA\fR array. For instance, creating a weak
+reference to the element itself could push that weak reference on to \f(CW@ISA\fR;
+and elements added after use of \f(CW$#ISA\fR would be ignored by method lookup
+[perl #85670].
+.SS "Other notable fixes"
+.IX Subsection "Other notable fixes"
+.IP \(bu 4
+\&\f(CW\*(C`quotemeta\*(C'\fR now quotes consistently the same non-ASCII characters under
+\&\f(CW\*(C`use feature \*(Aqunicode_strings\*(Aq\*(C'\fR, regardless of whether the string is
+encoded in UTF\-8 or not, hence fixing the last vestiges (we hope) of the
+notorious "The "Unicode Bug"" in perlunicode. [perl #77654].
+.Sp
+Which of these code points is quoted has changed, based on Unicode's
+recommendations. See "quotemeta" in perlfunc for details.
+.IP \(bu 4
+\&\f(CW\*(C`study\*(C'\fR is now a no-op, presumably fixing all outstanding bugs related to
+study causing regex matches to behave incorrectly!
+.IP \(bu 4
+When one writes \f(CW\*(C`open foo || die\*(C'\fR, which used to work in Perl 4, a
+"Precedence problem" warning is produced. This warning used erroneously to
+apply to fully-qualified bareword handle names not followed by \f(CW\*(C`||\*(C'\fR. This
+has been corrected.
+.IP \(bu 4
+After package aliasing (\f(CW\*(C`*foo:: = *bar::\*(C'\fR), \f(CW\*(C`select\*(C'\fR with 0 or 1 argument
+would sometimes return a name that could not be used to refer to the
+filehandle, or sometimes it would return \f(CW\*(C`undef\*(C'\fR even when a filehandle
+was selected. Now it returns a typeglob reference in such cases.
+.IP \(bu 4
+\&\f(CW\*(C`PerlIO::get_layers\*(C'\fR no longer ignores some arguments that it thinks are
+numeric, while treating others as filehandle names. It is now consistent
+for flat scalars (i.e., not references).
+.IP \(bu 4
+Unrecognized switches on \f(CW\*(C`#!\*(C'\fR line
+.Sp
+If a switch, such as \fB\-x\fR, that cannot occur on the \f(CW\*(C`#!\*(C'\fR line is used
+there, perl dies with "Can't emulate...".
+.Sp
+It used to produce the same message for switches that perl did not
+recognize at all, whether on the command line or the \f(CW\*(C`#!\*(C'\fR line.
+.Sp
+Now it produces the "Unrecognized switch" error message [perl #104288].
+.IP \(bu 4
+\&\f(CW\*(C`system\*(C'\fR now temporarily blocks the SIGCHLD signal handler, to prevent the
+signal handler from stealing the exit status [perl #105700].
+.IP \(bu 4
+The \f(CW%n\fR formatting code for \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`sprintf\*(C'\fR, which causes the number
+of characters to be assigned to the next argument, now actually
+assigns the number of characters, instead of the number of bytes.
+.Sp
+It also works now with special lvalue functions like \f(CW\*(C`substr\*(C'\fR and with
+nonexistent hash and array elements [perl #3471, #103492].
+.IP \(bu 4
+Perl skips copying values returned from a subroutine, for the sake of
+speed, if doing so would make no observable difference. Because of faulty
+logic, this would happen with the
+result of \f(CW\*(C`delete\*(C'\fR, \f(CW\*(C`shift\*(C'\fR or \f(CW\*(C`splice\*(C'\fR, even if the result was
+referenced elsewhere. It also did so with tied variables about to be freed
+[perl #91844, #95548].
+.IP \(bu 4
+\&\f(CW\*(C`utf8::decode\*(C'\fR now refuses to modify read-only scalars [perl #91850].
+.IP \(bu 4
+Freeing \f(CW$_\fR inside a \f(CW\*(C`grep\*(C'\fR or \f(CW\*(C`map\*(C'\fR block, a code block embedded in a
+regular expression, or an \f(CW@INC\fR filter (a subroutine returned by a
+subroutine in \f(CW@INC\fR) used to result in double frees or crashes
+[perl #91880, #92254, #92256].
+.IP \(bu 4
+\&\f(CW\*(C`eval\*(C'\fR returns \f(CW\*(C`undef\*(C'\fR in scalar context or an empty list in list
+context when there is a run-time error. When \f(CW\*(C`eval\*(C'\fR was passed a
+string in list context and a syntax error occurred, it used to return a
+list containing a single undefined element. Now it returns an empty
+list in list context for all errors [perl #80630].
+.IP \(bu 4
+\&\f(CW\*(C`goto &func\*(C'\fR no longer crashes, but produces an error message, when
+the unwinding of the current subroutine's scope fires a destructor that
+undefines the subroutine being "goneto" [perl #99850].
+.IP \(bu 4
+Perl now holds an extra reference count on the package that code is
+currently compiling in. This means that the following code no longer
+crashes [perl #101486]:
+.Sp
+.Vb 3
+\& package Foo;
+\& BEGIN {*Foo:: = *Bar::}
+\& sub foo;
+.Ve
+.IP \(bu 4
+The \f(CW\*(C`x\*(C'\fR repetition operator no longer crashes on 64\-bit builds with large
+repeat counts [perl #94560].
+.IP \(bu 4
+Calling \f(CW\*(C`require\*(C'\fR on an implicit \f(CW$_\fR when \f(CW*CORE::GLOBAL::require\fR has
+been overridden does not segfault anymore, and \f(CW$_\fR is now passed to the
+overriding subroutine [perl #78260].
+.IP \(bu 4
+\&\f(CW\*(C`use\*(C'\fR and \f(CW\*(C`require\*(C'\fR are no longer affected by the I/O layers active in
+the caller's scope (enabled by open.pm) [perl #96008].
+.IP \(bu 4
+\&\f(CW\*(C`our $::é; $é\*(C'\fR (which is invalid) no longer produces the "Compilation
+error at lib/utf8_heavy.pl..." error message, which it started emitting in
+5.10.0 [perl #99984].
+.IP \(bu 4
+On 64\-bit systems, \f(CWread()\fR now understands large string offsets beyond
+the 32\-bit range.
+.IP \(bu 4
+Errors that occur when processing subroutine attributes no longer cause the
+subroutine's op tree to leak.
+.IP \(bu 4
+Passing the same constant subroutine to both \f(CW\*(C`index\*(C'\fR and \f(CW\*(C`formline\*(C'\fR no
+longer causes one or the other to fail [perl #89218]. (5.14.1)
+.IP \(bu 4
+List assignment to lexical variables declared with attributes in the same
+statement (\f(CW\*(C`my ($x,@y) : blimp = (72,94)\*(C'\fR) stopped working in Perl 5.8.0.
+It has now been fixed.
+.IP \(bu 4
+Perl 5.10.0 introduced some faulty logic that made "U*" in the middle of
+a pack template equivalent to "U0" if the input string was empty. This has
+been fixed [perl #90160]. (5.14.2)
+.IP \(bu 4
+Destructors on objects were not called during global destruction on objects
+that were not referenced by any scalars. This could happen if an array
+element were blessed (e.g., \f(CW\*(C`bless \e$a[0]\*(C'\fR) or if a closure referenced a
+blessed variable (\f(CW\*(C`bless \emy @a; sub foo { @a }\*(C'\fR).
+.Sp
+Now there is an extra pass during global destruction to fire destructors on
+any objects that might be left after the usual passes that check for
+objects referenced by scalars [perl #36347].
+.IP \(bu 4
+Fixed a case where it was possible that a freed buffer may have been read
+from when parsing a here document [perl #90128]. (5.14.1)
+.IP \(bu 4
+\&\f(CWeach(\fR\f(CIARRAY\fR\f(CW)\fR is now wrapped in \f(CWdefined(...)\fR, like \f(CWeach(\fR\f(CIHASH\fR\f(CW)\fR,
+inside a \f(CW\*(C`while\*(C'\fR condition [perl #90888].
+.IP \(bu 4
+A problem with context propagation when a \f(CW\*(C`do\*(C'\fR block is an argument to
+\&\f(CW\*(C`return\*(C'\fR has been fixed. It used to cause \f(CW\*(C`undef\*(C'\fR to be returned in
+certain cases of a \f(CW\*(C`return\*(C'\fR inside an \f(CW\*(C`if\*(C'\fR block which itself is followed by
+another \f(CW\*(C`return\*(C'\fR.
+.IP \(bu 4
+Calling \f(CW\*(C`index\*(C'\fR with a tainted constant no longer causes constants in
+subsequently compiled code to become tainted [perl #64804].
+.IP \(bu 4
+Infinite loops like \f(CW\*(C`1 while 1\*(C'\fR used to stop \f(CW\*(C`strict \*(Aqsubs\*(Aq\*(C'\fR mode from
+working for the rest of the block.
+.IP \(bu 4
+For list assignments like \f(CW\*(C`($a,$b) = ($b,$a)\*(C'\fR, Perl has to make a copy of
+the items on the right-hand side before assignment them to the left. For
+efficiency's sake, it assigns the values on the right straight to the items
+on the left if no one variable is mentioned on both sides, as in \f(CW\*(C`($a,$b) =
+($c,$d)\*(C'\fR. The logic for determining when it can cheat was faulty, in that
+\&\f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR on the right-hand side could fool it. So \f(CW\*(C`($a,$b) =
+$some_true_value && ($b,$a)\*(C'\fR would end up assigning the value of \f(CW$b\fR to
+both scalars.
+.IP \(bu 4
+Perl no longer tries to apply lvalue context to the string in
+\&\f(CW\*(C`("string", $variable) ||= 1\*(C'\fR (which used to be an error). Since the
+left-hand side of \f(CW\*(C`||=\*(C'\fR is evaluated in scalar context, that's a scalar
+comma operator, which gives all but the last item void context. There is
+no such thing as void lvalue context, so it was a mistake for Perl to try
+to force it [perl #96942].
+.IP \(bu 4
+\&\f(CW\*(C`caller\*(C'\fR no longer leaks memory when called from the DB package if
+\&\f(CW@DB::args\fR was assigned to after the first call to \f(CW\*(C`caller\*(C'\fR. Carp
+was triggering this bug [perl #97010]. (5.14.2)
+.IP \(bu 4
+\&\f(CW\*(C`close\*(C'\fR and similar filehandle functions, when called on built-in global
+variables (like \f(CW$+\fR), used to die if the variable happened to hold the
+undefined value, instead of producing the usual "Use of uninitialized
+value" warning.
+.IP \(bu 4
+When autovivified file handles were introduced in Perl 5.6.0, \f(CW\*(C`readline\*(C'\fR
+was inadvertently made to autovivify when called as \f(CWreadline($foo)\fR (but
+not as \f(CW\*(C`<$foo>\*(C'\fR). It has now been fixed never to autovivify.
+.IP \(bu 4
+Calling an undefined anonymous subroutine (e.g., what \f(CW$x\fR holds after
+\&\f(CW\*(C`undef &{$x = sub{}}\*(C'\fR) used to cause a "Not a CODE reference" error, which
+has been corrected to "Undefined subroutine called" [perl #71154].
+.IP \(bu 4
+Causing \f(CW@DB::args\fR to be freed between uses of \f(CW\*(C`caller\*(C'\fR no longer
+results in a crash [perl #93320].
+.IP \(bu 4
+\&\f(CWsetpgrp($foo)\fR used to be equivalent to \f(CW\*(C`($foo, setpgrp)\*(C'\fR, because
+\&\f(CW\*(C`setpgrp\*(C'\fR was ignoring its argument if there was just one. Now it is
+equivalent to \f(CW\*(C`setpgrp($foo,0)\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`shmread\*(C'\fR was not setting the scalar flags correctly when reading from
+shared memory, causing the existing cached numeric representation in the
+scalar to persist [perl #98480].
+.IP \(bu 4
+\&\f(CW\*(C`++\*(C'\fR and \f(CW\*(C`\-\-\*(C'\fR now work on copies of globs, instead of dying.
+.IP \(bu 4
+\&\f(CWsplice()\fR doesn't warn when truncating
+.Sp
+You can now limit the size of an array using \f(CW\*(C`splice(@a,MAX_LEN)\*(C'\fR without
+worrying about warnings.
+.IP \(bu 4
+\&\f(CW$$\fR is no longer tainted. Since this value comes directly from
+\&\f(CWgetpid()\fR, it is always safe.
+.IP \(bu 4
+The parser no longer leaks a filehandle if STDIN was closed before parsing
+started [perl #37033].
+.IP \(bu 4
+\&\f(CW\*(C`die;\*(C'\fR with a non-reference, non-string, or magical (e.g., tainted)
+value in $@ now properly propagates that value [perl #111654].
+.SH "Known Problems"
+.IX Header "Known Problems"
+.IP \(bu 4
+On Solaris, we have two kinds of failure.
+.Sp
+If \fImake\fR is Sun's \fImake\fR, we get an error about a badly formed macro
+assignment in the \fIMakefile\fR. That happens when \fI./Configure\fR tries to
+make depends. \fIConfigure\fR then exits 0, but further \fImake\fR\-ing fails.
+.Sp
+If \fImake\fR is \fIgmake\fR, \fIConfigure\fR completes, then we get errors related
+to \fI/usr/include/stdbool.h\fR
+.IP \(bu 4
+On Win32, a number of tests hang unless STDERR is redirected. The cause of
+this is still under investigation.
+.IP \(bu 4
+When building as root with a umask that prevents files from being
+other-readable, \fIt/op/filetest.t\fR will fail. This is a test bug, not a
+bug in perl's behavior.
+.IP \(bu 4
+Configuring with a recent gcc and link-time-optimization, such as
+\&\f(CW\*(C`Configure \-Doptimize=\*(Aq\-O2 \-flto\*(Aq\*(C'\fR fails
+because the optimizer optimizes away some of Configure's tests. A
+workaround is to omit the \f(CW\*(C`\-flto\*(C'\fR flag when running Configure, but add
+it back in while actually building, something like
+.Sp
+.Vb 2
+\& sh Configure \-Doptimize=\-O2
+\& make OPTIMIZE=\*(Aq\-O2 \-flto\*(Aq
+.Ve
+.IP \(bu 4
+The following CPAN modules have test failures with perl 5.16. Patches have
+been submitted for all of these, so hopefully there will be new releases
+soon:
+.RS 4
+.IP \(bu 4
+Date::Pcalc version 6.1
+.IP \(bu 4
+Module::CPANTS::Analyse version 0.85
+.Sp
+This fails due to problems in Module::Find 0.10 and File::MMagic
+1.27.
+.IP \(bu 4
+PerlIO::Util version 0.72
+.RE
+.RS 4
+.RE
+.SH Acknowledgements
+.IX Header "Acknowledgements"
+Perl 5.16.0 represents approximately 12 months of development since Perl
+5.14.0 and contains approximately 590,000 lines of changes across 2,500
+files from 139 authors.
+.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.16.0:
+.PP
+Aaron Crane, Abhijit Menon-Sen, Abigail, Alan Haggai Alavi, Alberto
+Simões, Alexandr Ciornii, Andreas König, Andy Dougherty, Aristotle
+Pagaltzis, Bo Johansson, Bo Lindbergh, Breno G. de Oliveira, brian d
+foy, Brian Fraser, Brian Greenfield, Carl Hayter, Chas. Owens,
+Chia-liang Kao, Chip Salzenberg, Chris 'BinGOs' Williams, Christian
+Hansen, Christopher J. Madsen, chromatic, Claes Jacobsson, Claudio
+Ramirez, Craig A. Berry, Damian Conway, Daniel Kahn Gillmor, Darin
+McBride, Dave Rolsky, David Cantrell, David Golden, David Leadbeater,
+David Mitchell, Dee Newcum, Dennis Kaarsemaker, Dominic Hargreaves,
+Douglas Christopher Wilson, Eric Brine, Father Chrysostomos, Florian
+Ragwitz, Frederic Briere, George Greer, Gerard Goossen, Gisle Aas,
+H.Merijn Brand, Hojung Youn, Ian Goodacre, James E Keenan, Jan Dubois,
+Jerry D. Hedden, Jesse Luehrs, Jesse Vincent, Jilles Tjoelker, Jim
+Cromie, Jim Meyering, Joel Berger, Johan Vromans, Johannes Plunien, John
+Hawkinson, John P. Linderman, John Peacock, Joshua ben Jore, Juerd
+Waalboer, Karl Williamson, Karthik Rajagopalan, Keith Thompson, Kevin J.
+Woolley, Kevin Ryde, Laurent Dami, Leo Lapworth, Leon Brocard, Leon
+Timmermans, Louis Strous, Lukas Mai, Marc Green, Marcel Grünauer, Mark
+A. Stratman, Mark Dootson, Mark Jason Dominus, Martin Hasch, Matthew
+Horsfall, Max Maischein, Michael G Schwern, Michael Witten, Mike
+Sheldrake, Moritz Lenz, Nicholas Clark, Niko Tyni, Nuno Carvalho, Pau
+Amma, Paul Evans, Paul Green, Paul Johnson, Perlover, Peter John Acklam,
+Peter Martini, Peter Scott, Phil Monsen, Pino Toscano, Rafael
+Garcia-Suarez, Rainer Tammer, Reini Urban, Ricardo Signes, Robin Barker,
+Rodolfo Carvalho, Salvador Fandiño, Sam Kimbrel, Samuel Thibault, Shawn
+M Moore, Shigeya Suzuki, Shirakata Kentaro, Shlomi Fish, Sisyphus,
+Slaven Rezic, Spiros Denaxas, Steffen Müller, Steffen Schwigon, Stephen
+Bennett, Stephen Oberholtzer, Stevan Little, Steve Hay, Steve Peters,
+Thomas Sibley, Thorsten Glaser, Timothe Litt, Todd Rinaldo, Tom
+Christiansen, Tom Hukins, Tony Cook, Vadim Konovalov, Vincent Pit,
+Vladimir Timofeev, Walt Mankowski, Yves Orton, Zefram, Zsbán Ambrus,
+Ævar Arnfjörð Bjarmason.
+.PP
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not
+include the names of the (very much appreciated) contributors who
+reported issues to the Perl bug tracker.
+.PP
+Many of the changes included in this version originated in the CPAN
+modules included in Perl's core. We're grateful to the entire CPAN
+community for helping Perl to flourish.
+.PP
+For a more complete list of all of Perl's historical contributors,
+please see the \fIAUTHORS\fR file in the Perl source distribution.
+.SH "Reporting Bugs"
+.IX Header "Reporting Bugs"
+If you find what you think is a bug, you might check the articles
+recently posted to the comp.lang.perl.misc newsgroup and the perl
+bug database at <http://rt.perl.org/perlbug/>. There may also be
+information at <http://www.perl.org/>, the Perl Home Page.
+.PP
+If you believe you have an unreported bug, please run the perlbug
+program included with your release. Be sure to trim your bug down
+to a tiny but sufficient test case. Your bug report, along with the
+output of \f(CW\*(C`perl \-V\*(C'\fR, will be sent off to perlbug@perl.org to be
+analysed by the Perl porting team.
+.PP
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please
+send it to perl5\-security\-report@perl.org. This points to a closed
+subscription unarchived mailing list, which includes all core
+committers, who will be able to help assess the impact of issues, figure
+out a resolution, and help co-ordinate the release of patches to
+mitigate or fix the problem across all platforms on which Perl is
+supported. Please use this address only for security issues in the Perl
+core, not for modules independently distributed on CPAN.
+.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.