summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man1/perl5120delta.1
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/mageia-cauldron/man1/perl5120delta.1')
-rw-r--r--upstream/mageia-cauldron/man1/perl5120delta.12580
1 files changed, 2580 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perl5120delta.1 b/upstream/mageia-cauldron/man1/perl5120delta.1
new file mode 100644
index 00000000..5eb75037
--- /dev/null
+++ b/upstream/mageia-cauldron/man1/perl5120delta.1
@@ -0,0 +1,2580 @@
+.\" -*- 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 "PERL5120DELTA 1"
+.TH PERL5120DELTA 1 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+perl5120delta \- what is new for perl v5.12.0
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+This document describes differences between the 5.10.0 release and the
+5.12.0 release.
+.PP
+Many of the bug fixes in 5.12.0 are already included in the 5.10.1
+maintenance release.
+.PP
+You can see the list of those changes in the 5.10.1 release notes
+(perl5101delta).
+.SH "Core Enhancements"
+.IX Header "Core Enhancements"
+.ie n .SS "New ""package NAME VERSION"" syntax"
+.el .SS "New \f(CWpackage NAME VERSION\fP syntax"
+.IX Subsection "New package NAME VERSION syntax"
+This new syntax allows a module author to set the \f(CW$VERSION\fR of a namespace
+when the namespace is declared with 'package'. It eliminates the need
+for \f(CW\*(C`our $VERSION = ...\*(C'\fR and similar constructs. E.g.
+.PP
+.Vb 2
+\& package Foo::Bar 1.23;
+\& # $Foo::Bar::VERSION == 1.23
+.Ve
+.PP
+There are several advantages to this:
+.IP \(bu 4
+\&\f(CW$VERSION\fR is parsed in exactly the same way as \f(CW\*(C`use NAME VERSION\*(C'\fR
+.IP \(bu 4
+\&\f(CW$VERSION\fR is set at compile time
+.IP \(bu 4
+\&\f(CW$VERSION\fR is a version object that provides proper overloading of
+comparison operators so comparing \f(CW$VERSION\fR to decimal (1.23) or
+dotted-decimal (v1.2.3) version numbers works correctly.
+.IP \(bu 4
+Eliminates \f(CW\*(C`$VERSION = ...\*(C'\fR and \f(CW\*(C`eval $VERSION\*(C'\fR clutter
+.IP \(bu 4
+As it requires VERSION to be a numeric literal or v\-string
+literal, it can be statically parsed by toolchain modules
+without \f(CW\*(C`eval\*(C'\fR the way MM\->parse_version does for \f(CW\*(C`$VERSION = ...\*(C'\fR
+.PP
+It does not break old code with only \f(CW\*(C`package NAME\*(C'\fR, but code that uses
+\&\f(CW\*(C`package NAME VERSION\*(C'\fR will need to be restricted to perl 5.12.0 or newer
+This is analogous to the change to \f(CW\*(C`open\*(C'\fR from two-args to three-args.
+Users requiring the latest Perl will benefit, and perhaps after several
+years, it will become a standard practice.
+.PP
+However, \f(CW\*(C`package NAME VERSION\*(C'\fR requires a new, 'strict' version
+number format. See "Version number formats" for details.
+.ie n .SS "The ""..."" operator"
+.el .SS "The \f(CW...\fP operator"
+.IX Subsection "The ... operator"
+A new operator, \f(CW\*(C`...\*(C'\fR, nicknamed the Yada Yada operator, has been added.
+It is intended to mark placeholder code that is not yet implemented.
+See "Yada Yada Operator" in perlop.
+.SS "Implicit strictures"
+.IX Subsection "Implicit strictures"
+Using the \f(CW\*(C`use VERSION\*(C'\fR syntax with a version number greater or equal
+to 5.11.0 will lexically enable strictures just like \f(CW\*(C`use strict\*(C'\fR
+would do (in addition to enabling features.) The following:
+.PP
+.Vb 1
+\& use 5.12.0;
+.Ve
+.PP
+means:
+.PP
+.Vb 2
+\& use strict;
+\& use feature \*(Aq:5.12\*(Aq;
+.Ve
+.SS "Unicode improvements"
+.IX Subsection "Unicode improvements"
+Perl 5.12 comes with Unicode 5.2, the latest version available to
+us at the time of release. This version of Unicode was released in
+October 2009. See <http://www.unicode.org/versions/Unicode5.2.0> for
+further details about what's changed in this version of the standard.
+See perlunicode for instructions on installing and using other versions
+of Unicode.
+.PP
+Additionally, Perl's developers have significantly improved Perl's Unicode
+implementation. For full details, see "Unicode overhaul" below.
+.SS "Y2038 compliance"
+.IX Subsection "Y2038 compliance"
+Perl's core time-related functions are now Y2038 compliant. (It may not mean much to you, but your kids will love it!)
+.SS "qr overloading"
+.IX Subsection "qr overloading"
+It is now possible to overload the \f(CW\*(C`qr//\*(C'\fR operator, that is,
+conversion to regexp, like it was already possible to overload
+conversion to boolean, string or number of objects. It is invoked when
+an object appears on the right hand side of the \f(CW\*(C`=~\*(C'\fR operator or when
+it is interpolated into a regexp. See overload.
+.SS "Pluggable keywords"
+.IX Subsection "Pluggable keywords"
+Extension modules can now cleanly hook into the Perl parser to define
+new kinds of keyword-headed expression and compound statement. The
+syntax following the keyword is defined entirely by the extension. This
+allows a completely non-Perl sublanguage to be parsed inline, with the
+correct ops cleanly generated.
+.PP
+See "PL_keyword_plugin" in perlapi for the mechanism. The Perl core
+source distribution also includes a new module
+XS::APItest::KeywordRPN, which implements reverse Polish notation
+arithmetic via pluggable keywords. This module is mainly used for test
+purposes, and is not normally installed, but also serves as an example
+of how to use the new mechanism.
+.PP
+Perl's developers consider this feature to be experimental. We may remove
+it or change it in a backwards-incompatible way in Perl 5.14.
+.SS "APIs for more internals"
+.IX Subsection "APIs for more internals"
+The lowest layers of the lexer and parts of the pad system now have C
+APIs available to XS extensions. These are necessary to support proper
+use of pluggable keywords, but have other uses too. The new APIs are
+experimental, and only cover a small proportion of what would be
+necessary to take full advantage of the core's facilities in these
+areas. It is intended that the Perl 5.13 development cycle will see the
+addition of a full range of clean, supported interfaces.
+.PP
+Perl's developers consider this feature to be experimental. We may remove
+it or change it in a backwards-incompatible way in Perl 5.14.
+.SS "Overridable function lookup"
+.IX Subsection "Overridable function lookup"
+Where an extension module hooks the creation of rv2cv ops to modify the
+subroutine lookup process, this now works correctly for bareword
+subroutine calls. This means that prototypes on subroutines referenced
+this way will be processed correctly. (Previously bareword subroutine
+names were initially looked up, for parsing purposes, by an unhookable
+mechanism, so extensions could only properly influence subroutine names
+that appeared with an \f(CW\*(C`&\*(C'\fR sigil.)
+.SS "A proper interface for pluggable Method Resolution Orders"
+.IX Subsection "A proper interface for pluggable Method Resolution Orders"
+As of Perl 5.12.0 there is a new interface for plugging and using method
+resolution orders other than the default linear depth first search.
+The C3 method resolution order added in 5.10.0 has been re-implemented as
+a plugin, without changing its Perl-space interface. See perlmroapi for
+more information.
+.ie n .SS """\eN"" experimental regex escape"
+.el .SS "\f(CW\eN\fP experimental regex escape"
+.IX Subsection "N experimental regex escape"
+Perl now supports \f(CW\*(C`\eN\*(C'\fR, a new regex escape which you can think of as
+the inverse of \f(CW\*(C`\en\*(C'\fR. It will match any character that is not a newline,
+independently from the presence or absence of the single line match
+modifier \f(CW\*(C`/s\*(C'\fR. It is not usable within a character class. \f(CW\*(C`\eN{3}\*(C'\fR
+means to match 3 non-newlines; \f(CW\*(C`\eN{5,}\*(C'\fR means to match at least 5.
+\&\f(CW\*(C`\eN{NAME}\*(C'\fR still means the character or sequence named \f(CW\*(C`NAME\*(C'\fR, but
+\&\f(CW\*(C`NAME\*(C'\fR no longer can be things like \f(CW3\fR, or \f(CW\*(C`5,\*(C'\fR.
+.PP
+This will break a custom charnames translator which allows numbers for character names, as \f(CW\*(C`\eN{3}\*(C'\fR will
+now mean to match 3 non-newline characters, and not the character whose
+name is \f(CW3\fR. (No name defined by the Unicode standard is a number,
+so only custom translators might be affected.)
+.PP
+Perl's developers are somewhat concerned about possible user confusion
+with the existing \f(CW\*(C`\eN{...}\*(C'\fR construct which matches characters by their
+Unicode name. Consequently, this feature is experimental. We may remove
+it or change it in a backwards-incompatible way in Perl 5.14.
+.SS "DTrace support"
+.IX Subsection "DTrace support"
+Perl now has some support for DTrace. See "DTrace support" in \fIINSTALL\fR.
+.ie n .SS "Support for ""configure_requires"" in CPAN module metadata"
+.el .SS "Support for \f(CWconfigure_requires\fP in CPAN module metadata"
+.IX Subsection "Support for configure_requires in CPAN module metadata"
+Both \f(CW\*(C`CPAN\*(C'\fR and \f(CW\*(C`CPANPLUS\*(C'\fR now support the \f(CW\*(C`configure_requires\*(C'\fR
+keyword in the \fIMETA.yml\fR metadata file included in most recent CPAN
+distributions. This allows distribution authors to specify configuration
+prerequisites that must be installed before running \fIMakefile.PL\fR
+or \fIBuild.PL\fR.
+.PP
+See the documentation for \f(CW\*(C`ExtUtils::MakeMaker\*(C'\fR or \f(CW\*(C`Module::Build\*(C'\fR for
+more on how to specify \f(CW\*(C`configure_requires\*(C'\fR when creating a distribution
+for CPAN.
+.ie n .SS """each"", ""keys"", ""values"" are now more flexible"
+.el .SS "\f(CWeach\fP, \f(CWkeys\fP, \f(CWvalues\fP are now more flexible"
+.IX Subsection "each, keys, values are now more flexible"
+The \f(CW\*(C`each\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR function can now operate on arrays.
+.ie n .SS """when"" as a statement modifier"
+.el .SS "\f(CWwhen\fP as a statement modifier"
+.IX Subsection "when as a statement modifier"
+\&\f(CW\*(C`when\*(C'\fR is now allowed to be used as a statement modifier.
+.ie n .SS "$, flexibility"
+.el .SS "\f(CW$,\fP flexibility"
+.IX Subsection "$, flexibility"
+The variable \f(CW$,\fR may now be tied.
+.SS "// in when clauses"
+.IX Subsection "// in when clauses"
+// now behaves like || in when clauses
+.SS "Enabling warnings from your shell environment"
+.IX Subsection "Enabling warnings from your shell environment"
+You can now set \f(CW\*(C`\-W\*(C'\fR from the \f(CW\*(C`PERL5OPT\*(C'\fR environment variable
+.ie n .SS """delete local"""
+.el .SS "\f(CWdelete local\fP"
+.IX Subsection "delete local"
+\&\f(CW\*(C`delete local\*(C'\fR now allows you to locally delete a hash entry.
+.SS "New support for Abstract namespace sockets"
+.IX Subsection "New support for Abstract namespace sockets"
+Abstract namespace sockets are Linux-specific socket type that live in
+AF_UNIX family, slightly abusing it to be able to use arbitrary
+character arrays as addresses: They start with nul byte and are not
+terminated by nul byte, but with the length passed to the \fBsocket()\fR
+system call.
+.SS "32\-bit limit on substr arguments removed"
+.IX Subsection "32-bit limit on substr arguments removed"
+The 32\-bit limit on \f(CW\*(C`substr\*(C'\fR arguments has now been removed. The full
+range of the system's signed and unsigned integers is now available for
+the \f(CW\*(C`pos\*(C'\fR and \f(CW\*(C`len\*(C'\fR arguments.
+.SH "Potentially Incompatible Changes"
+.IX Header "Potentially Incompatible Changes"
+.SS "Deprecations warn by default"
+.IX Subsection "Deprecations warn by default"
+Over the years, Perl's developers have deprecated a number of language
+features for a variety of reasons. Perl now defaults to issuing a
+warning if a deprecated language feature is used. Many of the deprecations
+Perl now warns you about have been deprecated for many years. You can
+find a list of what was deprecated in a given release of Perl in the
+\&\f(CW\*(C`perl5xxdelta.pod\*(C'\fR file for that release.
+.PP
+To disable this feature in a given lexical scope, you should use \f(CW\*(C`no
+warnings \*(Aqdeprecated\*(Aq;\*(C'\fR For information about which language features
+are deprecated and explanations of various deprecation warnings, please
+see perldiag. See "Deprecations" below for the list of features
+and modules Perl's developers have deprecated as part of this release.
+.SS "Version number formats"
+.IX Subsection "Version number formats"
+Acceptable version number formats have been formalized into "strict" and
+"lax" rules. \f(CW\*(C`package NAME VERSION\*(C'\fR takes a strict version number.
+\&\f(CW\*(C`UNIVERSAL::VERSION\*(C'\fR and the version object constructors take lax
+version numbers. Providing an invalid version will result in a fatal
+error. The version argument in \f(CW\*(C`use NAME VERSION\*(C'\fR is first parsed as a
+numeric literal or v\-string and then passed to \f(CW\*(C`UNIVERSAL::VERSION\*(C'\fR
+(and must then pass the "lax" format test).
+.PP
+These formats are documented fully in the version module. To a first
+approximation, a "strict" version number is a positive decimal number
+(integer or decimal-fraction) without exponentiation or else a
+dotted-decimal v\-string with a leading 'v' character and at least three
+components. A "lax" version number allows v\-strings with fewer than
+three components or without a leading 'v'. Under "lax" rules, both
+decimal and dotted-decimal versions may have a trailing "alpha"
+component separated by an underscore character after a fractional or
+dotted-decimal component.
+.PP
+The version module adds \f(CW\*(C`version::is_strict\*(C'\fR and \f(CW\*(C`version::is_lax\*(C'\fR
+functions to check a scalar against these rules.
+.ie n .SS "@INC reorganization"
+.el .SS "\f(CW@INC\fP reorganization"
+.IX Subsection "@INC reorganization"
+In \f(CW@INC\fR, \f(CW\*(C`ARCHLIB\*(C'\fR and \f(CW\*(C`PRIVLIB\*(C'\fR now occur after the current
+version's \f(CW\*(C`site_perl\*(C'\fR and \f(CW\*(C`vendor_perl\*(C'\fR. Modules installed into
+\&\f(CW\*(C`site_perl\*(C'\fR and \f(CW\*(C`vendor_perl\*(C'\fR will now be loaded in preference to
+those installed in \f(CW\*(C`ARCHLIB\*(C'\fR and \f(CW\*(C`PRIVLIB\*(C'\fR.
+.SS "REGEXPs are now first class"
+.IX Subsection "REGEXPs are now first class"
+Internally, Perl now treats compiled regular expressions (such as
+those created with \f(CW\*(C`qr//\*(C'\fR) as first class entities. Perl modules which
+serialize, deserialize or otherwise have deep interaction with Perl's
+internal data structures need to be updated for this change. Most
+affected CPAN modules have already been updated as of this writing.
+.SS "Switch statement changes"
+.IX Subsection "Switch statement changes"
+The \f(CW\*(C`given\*(C'\fR/\f(CW\*(C`when\*(C'\fR switch statement handles complex statements better
+than Perl 5.10.0 did (These enhancements are also available in
+5.10.1 and subsequent 5.10 releases.) There are two new cases where
+\&\f(CW\*(C`when\*(C'\fR now interprets its argument as a boolean, instead of an
+expression to be used in a smart match:
+.IP "flip-flop operators" 4
+.IX Item "flip-flop operators"
+The \f(CW\*(C`..\*(C'\fR and \f(CW\*(C`...\*(C'\fR flip-flop operators are now evaluated in boolean
+context, following their usual semantics; see "Range Operators" in perlop.
+.Sp
+Note that, as in perl 5.10.0, \f(CW\*(C`when (1..10)\*(C'\fR will not work to test
+whether a given value is an integer between 1 and 10; you should use
+\&\f(CW\*(C`when ([1..10])\*(C'\fR instead (note the array reference).
+.Sp
+However, contrary to 5.10.0, evaluating the flip-flop operators in
+boolean context ensures it can now be useful in a \f(CWwhen()\fR, notably
+for implementing bistable conditions, like in:
+.Sp
+.Vb 3
+\& when (/^=begin/ .. /^=end/) {
+\& # do something
+\& }
+.Ve
+.IP "defined-or operator" 4
+.IX Item "defined-or operator"
+A compound expression involving the defined-or operator, as in
+\&\f(CW\*(C`when (expr1 // expr2)\*(C'\fR, will be treated as boolean if the first
+expression is boolean. (This just extends the existing rule that applies
+to the regular or operator, as in \f(CW\*(C`when (expr1 || expr2)\*(C'\fR.)
+.SS "Smart match changes"
+.IX Subsection "Smart match changes"
+Since Perl 5.10.0, Perl's developers have made a number of changes to
+the smart match operator. These, of course, also alter the behaviour
+of the switch statements where smart matching is implicitly used.
+These changes were also made for the 5.10.1 release, and will remain in
+subsequent 5.10 releases.
+.PP
+\fIChanges to type-based dispatch\fR
+.IX Subsection "Changes to type-based dispatch"
+.PP
+The smart match operator \f(CW\*(C`~~\*(C'\fR is no longer commutative. The behaviour of
+a smart match now depends primarily on the type of its right hand
+argument. Moreover, its semantics have been adjusted for greater
+consistency or usefulness in several cases. While the general backwards
+compatibility is maintained, several changes must be noted:
+.IP \(bu 4
+Code references with an empty prototype are no longer treated specially.
+They are passed an argument like the other code references (even if they
+choose to ignore it).
+.IP \(bu 4
+\&\f(CW\*(C`%hash ~~ sub {}\*(C'\fR and \f(CW\*(C`@array ~~ sub {}\*(C'\fR now test that the subroutine
+returns a true value for each key of the hash (or element of the
+array), instead of passing the whole hash or array as a reference to
+the subroutine.
+.IP \(bu 4
+Due to the commutativity breakage, code references are no longer
+treated specially when appearing on the left of the \f(CW\*(C`~~\*(C'\fR operator,
+but like any vulgar scalar.
+.IP \(bu 4
+\&\f(CW\*(C`undef ~~ %hash\*(C'\fR is always false (since \f(CW\*(C`undef\*(C'\fR can't be a key in a
+hash). No implicit conversion to \f(CW""\fR is done (as was the case in perl
+5.10.0).
+.IP \(bu 4
+\&\f(CW\*(C`$scalar ~~ @array\*(C'\fR now always distributes the smart match across the
+elements of the array. It's true if one element in \f(CW@array\fR verifies
+\&\f(CW\*(C`$scalar ~~ $element\*(C'\fR. This is a generalization of the old behaviour
+that tested whether the array contained the scalar.
+.PP
+The full dispatch table for the smart match operator is given in
+"Smart matching in detail" in perlsyn.
+.PP
+\fISmart match and overloading\fR
+.IX Subsection "Smart match and overloading"
+.PP
+According to the rule of dispatch based on the rightmost argument type,
+when an object overloading \f(CW\*(C`~~\*(C'\fR appears on the right side of the
+operator, the overload routine will always be called (with a 3rd argument
+set to a true value, see overload.) However, when the object will
+appear on the left, the overload routine will be called only when the
+rightmost argument is a simple scalar. This way, distributivity of smart
+match across arrays is not broken, as well as the other behaviours with
+complex types (coderefs, hashes, regexes). Thus, writers of overloading
+routines for smart match mostly need to worry only with comparing
+against a scalar, and possibly with stringification overloading; the
+other common cases will be automatically handled consistently.
+.PP
+\&\f(CW\*(C`~~\*(C'\fR will now refuse to work on objects that do not overload it (in order
+to avoid relying on the object's underlying structure). (However, if the
+object overloads the stringification or the numification operators, and
+if overload fallback is active, it will be used instead, as usual.)
+.SS "Other potentially incompatible changes"
+.IX Subsection "Other potentially incompatible changes"
+.IP \(bu 4
+The definitions of a number of Unicode properties have changed to match
+those of the current Unicode standard. These are listed above under
+"Unicode overhaul". This change may break code that expects the old
+definitions.
+.IP \(bu 4
+The boolkeys op has moved to the group of hash ops. This breaks binary
+compatibility.
+.IP \(bu 4
+Filehandles are now always blessed into \f(CW\*(C`IO::File\*(C'\fR.
+.Sp
+The previous behaviour was to bless Filehandles into FileHandle
+(an empty proxy class) if it was loaded into memory and otherwise
+to bless them into \f(CW\*(C`IO::Handle\*(C'\fR.
+.IP \(bu 4
+The semantics of \f(CW\*(C`use feature :5.10*\*(C'\fR have changed slightly.
+See "Modules and Pragmata" for more information.
+.IP \(bu 4
+Perl's developers now use git, rather than Perforce. This should be
+a purely internal change only relevant to people actively working on
+the core. However, you may see minor difference in perl as a consequence
+of the change. For example in some of details of the output of \f(CW\*(C`perl
+\&\-V\*(C'\fR. See perlrepository for more information.
+.IP \(bu 4
+As part of the \f(CW\*(C`Test::Harness\*(C'\fR 2.x to 3.x upgrade, the experimental
+\&\f(CW\*(C`Test::Harness::Straps\*(C'\fR module has been removed.
+See "Modules and Pragmata" for more details.
+.IP \(bu 4
+As part of the \f(CW\*(C`ExtUtils::MakeMaker\*(C'\fR upgrade, the
+\&\f(CW\*(C`ExtUtils::MakeMaker::bytes\*(C'\fR and \f(CW\*(C`ExtUtils::MakeMaker::vmsish\*(C'\fR modules
+have been removed from this distribution.
+.IP \(bu 4
+\&\f(CW\*(C`Module::CoreList\*(C'\fR no longer contains the \f(CW%:patchlevel\fR hash.
+.IP \(bu 4
+\&\f(CW\*(C`length undef\*(C'\fR now returns undef.
+.IP \(bu 4
+Unsupported private C API functions are now declared "static" to prevent
+leakage to Perl's public API.
+.IP \(bu 4
+To support the bootstrapping process, \fIminiperl\fR no longer builds with
+UTF\-8 support in the regexp engine.
+.Sp
+This allows a build to complete with PERL_UNICODE set and a UTF\-8 locale.
+Without this there's a bootstrapping problem, as miniperl can't load
+the UTF\-8 components of the regexp engine, because they're not yet built.
+.IP \(bu 4
+\&\fIminiperl\fR's \f(CW@INC\fR is now restricted to just \f(CW\*(C`\-I...\*(C'\fR, the split of
+\&\f(CW$ENV{PERL5LIB}\fR, and "\f(CW\*(C`.\*(C'\fR"
+.IP \(bu 4
+A space or a newline is now required after a \f(CW"#line XXX"\fR directive.
+.IP \(bu 4
+Tied filehandles now have an additional method EOF which provides the
+EOF type.
+.IP \(bu 4
+To better match all other flow control statements, \f(CW\*(C`foreach\*(C'\fR may no
+longer be used as an attribute.
+.IP \(bu 4
+Perl's command-line switch "\-P", which was deprecated in version 5.10.0, has
+now been removed. The CPAN module \f(CW\*(C`Filter::cpp\*(C'\fR can be used as an
+alternative.
+.SH Deprecations
+.IX Header "Deprecations"
+From time to time, Perl's developers find it necessary to deprecate
+features or modules we've previously shipped as part of the core
+distribution. We are well aware of the pain and frustration that a
+backwards-incompatible change to Perl can cause for developers building
+or maintaining software in Perl. You can be sure that when we deprecate
+a functionality or syntax, it isn't a choice we make lightly. Sometimes,
+we choose to deprecate functionality or syntax because it was found to
+be poorly designed or implemented. Sometimes, this is because they're
+holding back other features or causing performance problems. Sometimes,
+the reasons are more complex. Wherever possible, we try to keep deprecated
+functionality available to developers in its previous form for at least
+one major release. So long as a deprecated feature isn't actively
+disrupting our ability to maintain and extend Perl, we'll try to leave
+it in place as long as possible.
+.PP
+The following items are now deprecated:
+.IP suidperl 4
+.IX Item "suidperl"
+\&\f(CW\*(C`suidperl\*(C'\fR is no longer part of Perl. It used to provide a mechanism to
+emulate setuid permission bits on systems that don't support it properly.
+.ie n .IP "Use of "":="" to mean an empty attribute list" 4
+.el .IP "Use of \f(CW:=\fR to mean an empty attribute list" 4
+.IX Item "Use of := to mean an empty attribute list"
+An accident of Perl's parser meant that these constructions were all
+equivalent:
+.Sp
+.Vb 3
+\& my $pi := 4;
+\& my $pi : = 4;
+\& my $pi : = 4;
+.Ve
+.Sp
+with the \f(CW\*(C`:\*(C'\fR being treated as the start of an attribute list, which
+ends before the \f(CW\*(C`=\*(C'\fR. As whitespace is not significant here, all are
+parsed as an empty attribute list, hence all the above are equivalent
+to, and better written as
+.Sp
+.Vb 1
+\& my $pi = 4;
+.Ve
+.Sp
+because no attribute processing is done for an empty list.
+.Sp
+As is, this meant that \f(CW\*(C`:=\*(C'\fR cannot be used as a new token, without
+silently changing the meaning of existing code. Hence that particular
+form is now deprecated, and will become a syntax error. If it is
+absolutely necessary to have empty attribute lists (for example,
+because of a code generator) then avoid the warning by adding a space
+before the \f(CW\*(C`=\*(C'\fR.
+.ie n .IP """UNIVERSAL\->import()""" 4
+.el .IP \f(CWUNIVERSAL\->import()\fR 4
+.IX Item "UNIVERSAL->import()"
+The method \f(CW\*(C`UNIVERSAL\->import()\*(C'\fR is now deprecated. Attempting to
+pass import arguments to a \f(CW\*(C`use UNIVERSAL\*(C'\fR statement will result in a
+deprecation warning.
+.IP "Use of ""goto"" to jump into a construct" 4
+.IX Item "Use of ""goto"" to jump into a construct"
+Using \f(CW\*(C`goto\*(C'\fR to jump from an outer scope into an inner scope is now
+deprecated. This rare use case was causing problems in the
+implementation of scopes.
+.IP "Custom character names in \eN{name} that don't look like names" 4
+.IX Item "Custom character names in N{name} that don't look like names"
+In \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR, \fIname\fR can be just about anything. The standard
+Unicode names have a very limited domain, but a custom name translator
+could create names that are, for example, made up entirely of punctuation
+symbols. It is now deprecated to make names that don't begin with an
+alphabetic character, and aren't alphanumeric or contain other than
+a very few other characters, namely spaces, dashes, parentheses
+and colons. Because of the added meaning of \f(CW\*(C`\eN\*(C'\fR (See \f(CW\*(C`"\eN"
+experimental regex escape\*(C'\fR), names that look like curly brace \-enclosed
+quantifiers won't work. For example, \f(CW\*(C`\eN{3,4}\*(C'\fR now means to match 3 to
+4 non-newlines; before a custom name \f(CW\*(C`3,4\*(C'\fR could have been created.
+.IP "Deprecated Modules" 4
+.IX Item "Deprecated Modules"
+The following modules will be removed from the core distribution in a
+future release, and should be installed from CPAN instead. Distributions
+on CPAN which require these should add them to their prerequisites. The
+core versions of these modules warnings will issue a deprecation warning.
+.Sp
+If you ship a packaged version of Perl, either alone or as part of a
+larger system, then you should carefully consider the repercussions of
+core module deprecations. You may want to consider shipping your default
+build of Perl with packages for some or all deprecated modules which
+install into \f(CW\*(C`vendor\*(C'\fR or \f(CW\*(C`site\*(C'\fR perl library directories. This will
+inhibit the deprecation warnings.
+.Sp
+Alternatively, you may want to consider patching \fIlib/deprecate.pm\fR
+to provide deprecation warnings specific to your packaging system
+or distribution of Perl, consistent with how your packaging system
+or distribution manages a staged transition from a release where the
+installation of a single package provides the given functionality, to
+a later release where the system administrator needs to know to install
+multiple packages to get that same functionality.
+.Sp
+You can silence these deprecation warnings by installing the modules
+in question from CPAN. To install the latest version of all of them,
+just install \f(CW\*(C`Task::Deprecations::5_12\*(C'\fR.
+.RS 4
+.IP Class::ISA 4
+.IX Item "Class::ISA"
+.PD 0
+.IP Pod::Plainer 4
+.IX Item "Pod::Plainer"
+.IP Shell 4
+.IX Item "Shell"
+.IP Switch 4
+.IX Item "Switch"
+.PD
+Switch is buggy and should be avoided. You may find Perl's new
+\&\f(CW\*(C`given\*(C'\fR/\f(CW\*(C`when\*(C'\fR feature a suitable replacement. See "Switch
+statements" in perlsyn for more information.
+.RE
+.RS 4
+.RE
+.IP "Assignment to $[" 4
+.IX Item "Assignment to $["
+.PD 0
+.IP "Use of the attribute :locked on subroutines" 4
+.IX Item "Use of the attribute :locked on subroutines"
+.IP "Use of ""locked"" with the attributes pragma" 4
+.IX Item "Use of ""locked"" with the attributes pragma"
+.IP "Use of ""unique"" with the attributes pragma" 4
+.IX Item "Use of ""unique"" with the attributes pragma"
+.IP Perl_pmflag 4
+.IX Item "Perl_pmflag"
+.PD
+\&\f(CW\*(C`Perl_pmflag\*(C'\fR is no longer part of Perl's public API. Calling it now
+generates a deprecation warning, and it will be removed in a future
+release. Although listed as part of the API, it was never documented,
+and only ever used in \fItoke.c\fR, and prior to 5.10, \fIregcomp.c\fR. In
+core, it has been replaced by a static function.
+.IP "Numerous Perl 4\-era libraries" 4
+.IX Item "Numerous Perl 4-era libraries"
+\&\fItermcap.pl\fR, \fItainted.pl\fR, \fIstat.pl\fR, \fIshellwords.pl\fR, \fIpwd.pl\fR,
+\&\fIopen3.pl\fR, \fIopen2.pl\fR, \fInewgetopt.pl\fR, \fIlook.pl\fR, \fIfind.pl\fR,
+\&\fIfinddepth.pl\fR, \fIimportenv.pl\fR, \fIhostname.pl\fR, \fIgetopts.pl\fR,
+\&\fIgetopt.pl\fR, \fIgetcwd.pl\fR, \fIflush.pl\fR, \fIfastcwd.pl\fR, \fIexceptions.pl\fR,
+\&\fIctime.pl\fR, \fIcomplete.pl\fR, \fIcacheout.pl\fR, \fIbigrat.pl\fR, \fIbigint.pl\fR,
+\&\fIbigfloat.pl\fR, \fIassert.pl\fR, \fIabbrev.pl\fR, \fIdotsh.pl\fR, and
+\&\fItimelocal.pl\fR are all now deprecated. Earlier, Perl's developers
+intended to remove these libraries from Perl's core for the 5.14.0 release.
+.Sp
+During final testing before the release of 5.12.0, several developers
+discovered current production code using these ancient libraries, some
+inside the Perl core itself. Accordingly, the pumpking granted them
+a stay of execution. They will begin to warn about their deprecation
+in the 5.14.0 release and will be removed in the 5.16.0 release.
+.SH "Unicode overhaul"
+.IX Header "Unicode overhaul"
+Perl's developers have made a concerted effort to update Perl to be in
+sync with the latest Unicode standard. Changes for this include:
+.PP
+Perl can now handle every Unicode character property. New documentation,
+perluniprops, lists all available non-Unihan character properties. By
+default, perl does not expose Unihan, deprecated or Unicode-internal
+properties. See below for more details on these; there is also a section
+in the pod listing them, and explaining why they are not exposed.
+.PP
+Perl now fully supports the Unicode compound-style of using \f(CW\*(C`=\*(C'\fR
+and \f(CW\*(C`:\*(C'\fR in writing regular expressions: \f(CW\*(C`\ep{property=value}\*(C'\fR and
+\&\f(CW\*(C`\ep{property:value}\*(C'\fR (both of which mean the same thing).
+.PP
+Perl now fully supports the Unicode loose matching rules for text between
+the braces in \f(CW\*(C`\ep{...}\*(C'\fR constructs. In addition, Perl allows underscores
+between digits of numbers.
+.PP
+Perl now accepts all the Unicode-defined synonyms for properties and
+property values.
+.PP
+\&\f(CW\*(C`qr/\eX/\*(C'\fR, which matches a Unicode logical character, has
+been expanded to work better with various Asian languages. It
+now is defined as an \fIextended grapheme cluster\fR. (See
+<http://www.unicode.org/reports/tr29/>). Anything matched previously
+and that made sense will continue to be accepted. Additionally:
+.IP \(bu 4
+\&\f(CW\*(C`\eX\*(C'\fR will not break apart a \f(CW\*(C`CR\ LF\*(C'\fR sequence.
+.IP \(bu 4
+\&\f(CW\*(C`\eX\*(C'\fR will now match a sequence which includes the \f(CW\*(C`ZWJ\*(C'\fR and \f(CW\*(C`ZWNJ\*(C'\fR
+characters.
+.IP \(bu 4
+\&\f(CW\*(C`\eX\*(C'\fR will now always match at least one character, including an initial
+mark. Marks generally come after a base character, but it is possible in
+Unicode to have them in isolation, and \f(CW\*(C`\eX\*(C'\fR will now handle that case,
+for example at the beginning of a line, or after a \f(CW\*(C`ZWSP\*(C'\fR. And this is
+the part where \f(CW\*(C`\eX\*(C'\fR doesn't match the things that it used to that don't
+make sense. Formerly, for example, you could have the nonsensical case
+of an accented LF.
+.IP \(bu 4
+\&\f(CW\*(C`\eX\*(C'\fR will now match a (Korean) Hangul syllable sequence, and the Thai
+and Lao exception cases.
+.PP
+Otherwise, this change should be transparent for the non-affected
+languages.
+.PP
+\&\f(CW\*(C`\ep{...}\*(C'\fR matches using the Canonical_Combining_Class property were
+completely broken in previous releases of Perl. They should now work
+correctly.
+.PP
+Before Perl 5.12, the Unicode \f(CW\*(C`Decomposition_Type=Compat\*(C'\fR property
+and a Perl extension had the same name, which led to neither matching
+all the correct values (with more than 100 mistakes in one, and several
+thousand in the other). The Perl extension has now been renamed to be
+\&\f(CW\*(C`Decomposition_Type=Noncanonical\*(C'\fR (short: \f(CW\*(C`dt=noncanon\*(C'\fR). It has the
+same meaning as was previously intended, namely the union of all the
+non-canonical Decomposition types, with Unicode \f(CW\*(C`Compat\*(C'\fR being just
+one of those.
+.PP
+\&\f(CW\*(C`\ep{Decomposition_Type=Canonical}\*(C'\fR now includes the Hangul syllables.
+.PP
+\&\f(CW\*(C`\ep{Uppercase}\*(C'\fR and \f(CW\*(C`\ep{Lowercase}\*(C'\fR now work as the Unicode standard
+says they should. This means they each match a few more characters than
+they used to.
+.PP
+\&\f(CW\*(C`\ep{Cntrl}\*(C'\fR now matches the same characters as \f(CW\*(C`\ep{Control}\*(C'\fR. This
+means it no longer will match Private Use (gc=co), Surrogates (gc=cs),
+nor Format (gc=cf) code points. The Format code points represent the
+biggest possible problem. All but 36 of them are either officially
+deprecated or strongly discouraged from being used. Of those 36, likely
+the most widely used are the soft hyphen (U+00AD), and BOM, ZWSP, ZWNJ,
+WJ, and similar characters, plus bidirectional controls.
+.PP
+\&\f(CW\*(C`\ep{Alpha}\*(C'\fR now matches the same characters as \f(CW\*(C`\ep{Alphabetic}\*(C'\fR. Before
+5.12, Perl's definition included a number of things that aren't
+really alpha (all marks) while omitting many that were. The definitions
+of \f(CW\*(C`\ep{Alnum}\*(C'\fR and \f(CW\*(C`\ep{Word}\*(C'\fR depend on Alpha's definition and have
+changed accordingly.
+.PP
+\&\f(CW\*(C`\ep{Word}\*(C'\fR no longer incorrectly matches non-word characters such
+as fractions.
+.PP
+\&\f(CW\*(C`\ep{Print}\*(C'\fR no longer matches the line control characters: Tab, LF,
+CR, FF, VT, and NEL. This brings it in line with standards and the
+documentation.
+.PP
+\&\f(CW\*(C`\ep{XDigit}\*(C'\fR now matches the same characters as \f(CW\*(C`\ep{Hex_Digit}\*(C'\fR. This
+means that in addition to the characters it currently matches,
+\&\f(CW\*(C`[A\-Fa\-f0\-9]\*(C'\fR, it will also match the 22 fullwidth equivalents, for
+example U+FF10: FULLWIDTH DIGIT ZERO.
+.PP
+The Numeric type property has been extended to include the Unihan
+characters.
+.PP
+There is a new Perl extension, the 'Present_In', or simply 'In',
+property. This is an extension of the Unicode Age property, but
+\&\f(CW\*(C`\ep{In=5.0}\*(C'\fR matches any code point whose usage has been determined
+\&\fIas of\fR Unicode version 5.0. The \f(CW\*(C`\ep{Age=5.0}\*(C'\fR only matches code points
+added in \fIprecisely\fR version 5.0.
+.PP
+A number of properties now have the correct values for unassigned
+code points. The affected properties are Bidi_Class, East_Asian_Width,
+Joining_Type, Decomposition_Type, Hangul_Syllable_Type, Numeric_Type,
+and Line_Break.
+.PP
+The Default_Ignorable_Code_Point, ID_Continue, and ID_Start properties
+are now up to date with current Unicode definitions.
+.PP
+Earlier versions of Perl erroneously exposed certain properties that
+are supposed to be Unicode internal-only. Use of these in regular
+expressions will now generate, if enabled, a deprecation warning message.
+The 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
+It is now possible to change which Unicode properties Perl understands
+on a per-installation basis. As mentioned above, certain properties
+are turned off by default. These include all the Unihan properties
+(which should be accessible via the CPAN module Unicode::Unihan) and any
+deprecated or Unicode internal-only property that Perl has never exposed.
+.PP
+The generated files in the \f(CW\*(C`lib/unicore/To\*(C'\fR directory are now more
+clearly marked as being stable, directly usable by applications. New hash
+entries in them give the format of the normal entries, which allows for
+easier machine parsing. Perl can generate files in this directory for
+any property, though most are suppressed. You can find instructions
+for changing which are written in perluniprops.
+.SH "Modules and Pragmata"
+.IX Header "Modules and Pragmata"
+.SS "New Modules and Pragmata"
+.IX Subsection "New Modules and Pragmata"
+.ie n .IP """autodie""" 4
+.el .IP \f(CWautodie\fR 4
+.IX Item "autodie"
+\&\f(CW\*(C`autodie\*(C'\fR is a new lexically-scoped alternative for the \f(CW\*(C`Fatal\*(C'\fR module.
+The bundled version is 2.06_01. Note that in this release, using a string
+eval when \f(CW\*(C`autodie\*(C'\fR is in effect can cause the autodie behaviour to leak
+into the surrounding scope. See "BUGS" in autodie for more details.
+.Sp
+Version 2.06_01 has been added to the Perl core.
+.ie n .IP """Compress::Raw::Bzip2""" 4
+.el .IP \f(CWCompress::Raw::Bzip2\fR 4
+.IX Item "Compress::Raw::Bzip2"
+Version 2.024 has been added to the Perl core.
+.ie n .IP """overloading""" 4
+.el .IP \f(CWoverloading\fR 4
+.IX Item "overloading"
+\&\f(CW\*(C`overloading\*(C'\fR allows you to lexically disable or enable overloading
+for some or all operations.
+.Sp
+Version 0.001 has been added to the Perl core.
+.ie n .IP """parent""" 4
+.el .IP \f(CWparent\fR 4
+.IX Item "parent"
+\&\f(CW\*(C`parent\*(C'\fR establishes an ISA relationship with base classes at compile
+time. It provides the key feature of \f(CW\*(C`base\*(C'\fR without further unwanted
+behaviors.
+.Sp
+Version 0.223 has been added to the Perl core.
+.ie n .IP """Parse::CPAN::Meta""" 4
+.el .IP \f(CWParse::CPAN::Meta\fR 4
+.IX Item "Parse::CPAN::Meta"
+Version 1.40 has been added to the Perl core.
+.ie n .IP """VMS::DCLsym""" 4
+.el .IP \f(CWVMS::DCLsym\fR 4
+.IX Item "VMS::DCLsym"
+Version 1.03 has been added to the Perl core.
+.ie n .IP """VMS::Stdio""" 4
+.el .IP \f(CWVMS::Stdio\fR 4
+.IX Item "VMS::Stdio"
+Version 2.4 has been added to the Perl core.
+.ie n .IP """XS::APItest::KeywordRPN""" 4
+.el .IP \f(CWXS::APItest::KeywordRPN\fR 4
+.IX Item "XS::APItest::KeywordRPN"
+Version 0.003 has been added to the Perl core.
+.SS "Updated Pragmata"
+.IX Subsection "Updated Pragmata"
+.ie n .IP """base""" 4
+.el .IP \f(CWbase\fR 4
+.IX Item "base"
+Upgraded from version 2.13 to 2.15.
+.ie n .IP """bignum""" 4
+.el .IP \f(CWbignum\fR 4
+.IX Item "bignum"
+Upgraded from version 0.22 to 0.23.
+.ie n .IP """charnames""" 4
+.el .IP \f(CWcharnames\fR 4
+.IX Item "charnames"
+\&\f(CW\*(C`charnames\*(C'\fR now contains the Unicode \fINameAliases.txt\fR database file.
+This has the effect of adding some extra \f(CW\*(C`\eN\*(C'\fR character names that
+formerly wouldn't have been recognised; for example, \f(CW"\eN{LATIN CAPITAL
+LETTER GHA}"\fR.
+.Sp
+Upgraded from version 1.06 to 1.07.
+.ie n .IP """constant""" 4
+.el .IP \f(CWconstant\fR 4
+.IX Item "constant"
+Upgraded from version 1.13 to 1.20.
+.ie n .IP """diagnostics""" 4
+.el .IP \f(CWdiagnostics\fR 4
+.IX Item "diagnostics"
+\&\f(CW\*(C`diagnostics\*(C'\fR now supports %.0f formatting internally.
+.Sp
+\&\f(CW\*(C`diagnostics\*(C'\fR no longer suppresses \f(CW\*(C`Use of uninitialized value in range
+(or flip)\*(C'\fR warnings. [perl #71204]
+.Sp
+Upgraded from version 1.17 to 1.19.
+.ie n .IP """feature""" 4
+.el .IP \f(CWfeature\fR 4
+.IX Item "feature"
+In \f(CW\*(C`feature\*(C'\fR, the meaning of the \f(CW\*(C`:5.10\*(C'\fR and \f(CW\*(C`:5.10.X\*(C'\fR feature
+bundles has changed slightly. The last component, if any (i.e. \f(CW\*(C`X\*(C'\fR) is
+simply ignored. This is predicated on the assumption that new features
+will not, in general, be added to maintenance releases. So \f(CW\*(C`:5.10\*(C'\fR
+and \f(CW\*(C`:5.10.X\*(C'\fR have identical effect. This is a change to the behaviour
+documented for 5.10.0.
+.Sp
+\&\f(CW\*(C`feature\*(C'\fR now includes the \f(CW\*(C`unicode_strings\*(C'\fR feature:
+.Sp
+.Vb 1
+\& use feature "unicode_strings";
+.Ve
+.Sp
+This pragma turns on Unicode semantics for the case-changing operations
+(\f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`ucfirst\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR) on strings that don't have the
+internal UTF\-8 flag set, but that contain single-byte characters between
+128 and 255.
+.Sp
+Upgraded from version 1.11 to 1.16.
+.ie n .IP """less""" 4
+.el .IP \f(CWless\fR 4
+.IX Item "less"
+\&\f(CW\*(C`less\*(C'\fR now includes the \f(CW\*(C`stash_name\*(C'\fR method to allow subclasses of
+\&\f(CW\*(C`less\*(C'\fR to pick where in %^H to store their stash.
+.Sp
+Upgraded from version 0.02 to 0.03.
+.ie n .IP """lib""" 4
+.el .IP \f(CWlib\fR 4
+.IX Item "lib"
+Upgraded from version 0.5565 to 0.62.
+.ie n .IP """mro""" 4
+.el .IP \f(CWmro\fR 4
+.IX Item "mro"
+\&\f(CW\*(C`mro\*(C'\fR is now implemented as an XS extension. The documented interface has
+not changed. Code relying on the implementation detail that some \f(CW\*(C`mro::\*(C'\fR
+methods happened to be available at all times gets to "keep both pieces".
+.Sp
+Upgraded from version 1.00 to 1.02.
+.ie n .IP """overload""" 4
+.el .IP \f(CWoverload\fR 4
+.IX Item "overload"
+\&\f(CW\*(C`overload\*(C'\fR now allow overloading of 'qr'.
+.Sp
+Upgraded from version 1.06 to 1.10.
+.ie n .IP """threads""" 4
+.el .IP \f(CWthreads\fR 4
+.IX Item "threads"
+Upgraded from version 1.67 to 1.75.
+.ie n .IP """threads::shared""" 4
+.el .IP \f(CWthreads::shared\fR 4
+.IX Item "threads::shared"
+Upgraded from version 1.14 to 1.32.
+.ie n .IP """version""" 4
+.el .IP \f(CWversion\fR 4
+.IX Item "version"
+\&\f(CW\*(C`version\*(C'\fR now has support for "Version number formats" as described
+earlier in this document and in its own documentation.
+.Sp
+Upgraded from version 0.74 to 0.82.
+.ie n .IP """warnings""" 4
+.el .IP \f(CWwarnings\fR 4
+.IX Item "warnings"
+\&\f(CW\*(C`warnings\*(C'\fR has a new \f(CWwarnings::fatal_enabled()\fR function. It also
+includes a new \f(CW\*(C`illegalproto\*(C'\fR warning category. See also "New or
+Changed Diagnostics" for this change.
+.Sp
+Upgraded from version 1.06 to 1.09.
+.SS "Updated Modules"
+.IX Subsection "Updated Modules"
+.ie n .IP """Archive::Extract""" 4
+.el .IP \f(CWArchive::Extract\fR 4
+.IX Item "Archive::Extract"
+Upgraded from version 0.24 to 0.38.
+.ie n .IP """Archive::Tar""" 4
+.el .IP \f(CWArchive::Tar\fR 4
+.IX Item "Archive::Tar"
+Upgraded from version 1.38 to 1.54.
+.ie n .IP """Attribute::Handlers""" 4
+.el .IP \f(CWAttribute::Handlers\fR 4
+.IX Item "Attribute::Handlers"
+Upgraded from version 0.79 to 0.87.
+.ie n .IP """AutoLoader""" 4
+.el .IP \f(CWAutoLoader\fR 4
+.IX Item "AutoLoader"
+Upgraded from version 5.63 to 5.70.
+.ie n .IP """B::Concise""" 4
+.el .IP \f(CWB::Concise\fR 4
+.IX Item "B::Concise"
+Upgraded from version 0.74 to 0.78.
+.ie n .IP """B::Debug""" 4
+.el .IP \f(CWB::Debug\fR 4
+.IX Item "B::Debug"
+Upgraded from version 1.05 to 1.12.
+.ie n .IP """B::Deparse""" 4
+.el .IP \f(CWB::Deparse\fR 4
+.IX Item "B::Deparse"
+Upgraded from version 0.83 to 0.96.
+.ie n .IP """B::Lint""" 4
+.el .IP \f(CWB::Lint\fR 4
+.IX Item "B::Lint"
+Upgraded from version 1.09 to 1.11_01.
+.ie n .IP """CGI""" 4
+.el .IP \f(CWCGI\fR 4
+.IX Item "CGI"
+Upgraded from version 3.29 to 3.48.
+.ie n .IP """Class::ISA""" 4
+.el .IP \f(CWClass::ISA\fR 4
+.IX Item "Class::ISA"
+Upgraded from version 0.33 to 0.36.
+.Sp
+NOTE: \f(CW\*(C`Class::ISA\*(C'\fR is deprecated and may be removed from a future
+version of Perl.
+.ie n .IP """Compress::Raw::Zlib""" 4
+.el .IP \f(CWCompress::Raw::Zlib\fR 4
+.IX Item "Compress::Raw::Zlib"
+Upgraded from version 2.008 to 2.024.
+.ie n .IP """CPAN""" 4
+.el .IP \f(CWCPAN\fR 4
+.IX Item "CPAN"
+Upgraded from version 1.9205 to 1.94_56.
+.ie n .IP """CPANPLUS""" 4
+.el .IP \f(CWCPANPLUS\fR 4
+.IX Item "CPANPLUS"
+Upgraded from version 0.84 to 0.90.
+.ie n .IP """CPANPLUS::Dist::Build""" 4
+.el .IP \f(CWCPANPLUS::Dist::Build\fR 4
+.IX Item "CPANPLUS::Dist::Build"
+Upgraded from version 0.06_02 to 0.46.
+.ie n .IP """Data::Dumper""" 4
+.el .IP \f(CWData::Dumper\fR 4
+.IX Item "Data::Dumper"
+Upgraded from version 2.121_14 to 2.125.
+.ie n .IP """DB_File""" 4
+.el .IP \f(CWDB_File\fR 4
+.IX Item "DB_File"
+Upgraded from version 1.816_1 to 1.820.
+.ie n .IP """Devel::PPPort""" 4
+.el .IP \f(CWDevel::PPPort\fR 4
+.IX Item "Devel::PPPort"
+Upgraded from version 3.13 to 3.19.
+.ie n .IP """Digest""" 4
+.el .IP \f(CWDigest\fR 4
+.IX Item "Digest"
+Upgraded from version 1.15 to 1.16.
+.ie n .IP """Digest::MD5""" 4
+.el .IP \f(CWDigest::MD5\fR 4
+.IX Item "Digest::MD5"
+Upgraded from version 2.36_01 to 2.39.
+.ie n .IP """Digest::SHA""" 4
+.el .IP \f(CWDigest::SHA\fR 4
+.IX Item "Digest::SHA"
+Upgraded from version 5.45 to 5.47.
+.ie n .IP """Encode""" 4
+.el .IP \f(CWEncode\fR 4
+.IX Item "Encode"
+Upgraded from version 2.23 to 2.39.
+.ie n .IP """Exporter""" 4
+.el .IP \f(CWExporter\fR 4
+.IX Item "Exporter"
+Upgraded from version 5.62 to 5.64_01.
+.ie n .IP """ExtUtils::CBuilder""" 4
+.el .IP \f(CWExtUtils::CBuilder\fR 4
+.IX Item "ExtUtils::CBuilder"
+Upgraded from version 0.21 to 0.27.
+.ie n .IP """ExtUtils::Command""" 4
+.el .IP \f(CWExtUtils::Command\fR 4
+.IX Item "ExtUtils::Command"
+Upgraded from version 1.13 to 1.16.
+.ie n .IP """ExtUtils::Constant""" 4
+.el .IP \f(CWExtUtils::Constant\fR 4
+.IX Item "ExtUtils::Constant"
+Upgraded from version 0.2 to 0.22.
+.ie n .IP """ExtUtils::Install""" 4
+.el .IP \f(CWExtUtils::Install\fR 4
+.IX Item "ExtUtils::Install"
+Upgraded from version 1.44 to 1.55.
+.ie n .IP """ExtUtils::MakeMaker""" 4
+.el .IP \f(CWExtUtils::MakeMaker\fR 4
+.IX Item "ExtUtils::MakeMaker"
+Upgraded from version 6.42 to 6.56.
+.ie n .IP """ExtUtils::Manifest""" 4
+.el .IP \f(CWExtUtils::Manifest\fR 4
+.IX Item "ExtUtils::Manifest"
+Upgraded from version 1.51_01 to 1.57.
+.ie n .IP """ExtUtils::ParseXS""" 4
+.el .IP \f(CWExtUtils::ParseXS\fR 4
+.IX Item "ExtUtils::ParseXS"
+Upgraded from version 2.18_02 to 2.21.
+.ie n .IP """File::Fetch""" 4
+.el .IP \f(CWFile::Fetch\fR 4
+.IX Item "File::Fetch"
+Upgraded from version 0.14 to 0.24.
+.ie n .IP """File::Path""" 4
+.el .IP \f(CWFile::Path\fR 4
+.IX Item "File::Path"
+Upgraded from version 2.04 to 2.08_01.
+.ie n .IP """File::Temp""" 4
+.el .IP \f(CWFile::Temp\fR 4
+.IX Item "File::Temp"
+Upgraded from version 0.18 to 0.22.
+.ie n .IP """Filter::Simple""" 4
+.el .IP \f(CWFilter::Simple\fR 4
+.IX Item "Filter::Simple"
+Upgraded from version 0.82 to 0.84.
+.ie n .IP """Filter::Util::Call""" 4
+.el .IP \f(CWFilter::Util::Call\fR 4
+.IX Item "Filter::Util::Call"
+Upgraded from version 1.07 to 1.08.
+.ie n .IP """Getopt::Long""" 4
+.el .IP \f(CWGetopt::Long\fR 4
+.IX Item "Getopt::Long"
+Upgraded from version 2.37 to 2.38.
+.ie n .IP """IO""" 4
+.el .IP \f(CWIO\fR 4
+.IX Item "IO"
+Upgraded from version 1.23_01 to 1.25_02.
+.ie n .IP """IO::Zlib""" 4
+.el .IP \f(CWIO::Zlib\fR 4
+.IX Item "IO::Zlib"
+Upgraded from version 1.07 to 1.10.
+.ie n .IP """IPC::Cmd""" 4
+.el .IP \f(CWIPC::Cmd\fR 4
+.IX Item "IPC::Cmd"
+Upgraded from version 0.40_1 to 0.54.
+.ie n .IP """IPC::SysV""" 4
+.el .IP \f(CWIPC::SysV\fR 4
+.IX Item "IPC::SysV"
+Upgraded from version 1.05 to 2.01.
+.ie n .IP """Locale::Maketext""" 4
+.el .IP \f(CWLocale::Maketext\fR 4
+.IX Item "Locale::Maketext"
+Upgraded from version 1.12 to 1.14.
+.ie n .IP """Locale::Maketext::Simple""" 4
+.el .IP \f(CWLocale::Maketext::Simple\fR 4
+.IX Item "Locale::Maketext::Simple"
+Upgraded from version 0.18 to 0.21.
+.ie n .IP """Log::Message""" 4
+.el .IP \f(CWLog::Message\fR 4
+.IX Item "Log::Message"
+Upgraded from version 0.01 to 0.02.
+.ie n .IP """Log::Message::Simple""" 4
+.el .IP \f(CWLog::Message::Simple\fR 4
+.IX Item "Log::Message::Simple"
+Upgraded from version 0.04 to 0.06.
+.ie n .IP """Math::BigInt""" 4
+.el .IP \f(CWMath::BigInt\fR 4
+.IX Item "Math::BigInt"
+Upgraded from version 1.88 to 1.89_01.
+.ie n .IP """Math::BigInt::FastCalc""" 4
+.el .IP \f(CWMath::BigInt::FastCalc\fR 4
+.IX Item "Math::BigInt::FastCalc"
+Upgraded from version 0.16 to 0.19.
+.ie n .IP """Math::BigRat""" 4
+.el .IP \f(CWMath::BigRat\fR 4
+.IX Item "Math::BigRat"
+Upgraded from version 0.21 to 0.24.
+.ie n .IP """Math::Complex""" 4
+.el .IP \f(CWMath::Complex\fR 4
+.IX Item "Math::Complex"
+Upgraded from version 1.37 to 1.56.
+.ie n .IP """Memoize""" 4
+.el .IP \f(CWMemoize\fR 4
+.IX Item "Memoize"
+Upgraded from version 1.01_02 to 1.01_03.
+.ie n .IP """MIME::Base64""" 4
+.el .IP \f(CWMIME::Base64\fR 4
+.IX Item "MIME::Base64"
+Upgraded from version 3.07_01 to 3.08.
+.ie n .IP """Module::Build""" 4
+.el .IP \f(CWModule::Build\fR 4
+.IX Item "Module::Build"
+Upgraded from version 0.2808_01 to 0.3603.
+.ie n .IP """Module::CoreList""" 4
+.el .IP \f(CWModule::CoreList\fR 4
+.IX Item "Module::CoreList"
+Upgraded from version 2.12 to 2.29.
+.ie n .IP """Module::Load""" 4
+.el .IP \f(CWModule::Load\fR 4
+.IX Item "Module::Load"
+Upgraded from version 0.12 to 0.16.
+.ie n .IP """Module::Load::Conditional""" 4
+.el .IP \f(CWModule::Load::Conditional\fR 4
+.IX Item "Module::Load::Conditional"
+Upgraded from version 0.22 to 0.34.
+.ie n .IP """Module::Loaded""" 4
+.el .IP \f(CWModule::Loaded\fR 4
+.IX Item "Module::Loaded"
+Upgraded from version 0.01 to 0.06.
+.ie n .IP """Module::Pluggable""" 4
+.el .IP \f(CWModule::Pluggable\fR 4
+.IX Item "Module::Pluggable"
+Upgraded from version 3.6 to 3.9.
+.ie n .IP """Net::Ping""" 4
+.el .IP \f(CWNet::Ping\fR 4
+.IX Item "Net::Ping"
+Upgraded from version 2.33 to 2.36.
+.ie n .IP """NEXT""" 4
+.el .IP \f(CWNEXT\fR 4
+.IX Item "NEXT"
+Upgraded from version 0.60_01 to 0.64.
+.ie n .IP """Object::Accessor""" 4
+.el .IP \f(CWObject::Accessor\fR 4
+.IX Item "Object::Accessor"
+Upgraded from version 0.32 to 0.36.
+.ie n .IP """Package::Constants""" 4
+.el .IP \f(CWPackage::Constants\fR 4
+.IX Item "Package::Constants"
+Upgraded from version 0.01 to 0.02.
+.ie n .IP """PerlIO""" 4
+.el .IP \f(CWPerlIO\fR 4
+.IX Item "PerlIO"
+Upgraded from version 1.04 to 1.06.
+.ie n .IP """Pod::Parser""" 4
+.el .IP \f(CWPod::Parser\fR 4
+.IX Item "Pod::Parser"
+Upgraded from version 1.35 to 1.37.
+.ie n .IP """Pod::Perldoc""" 4
+.el .IP \f(CWPod::Perldoc\fR 4
+.IX Item "Pod::Perldoc"
+Upgraded from version 3.14_02 to 3.15_02.
+.ie n .IP """Pod::Plainer""" 4
+.el .IP \f(CWPod::Plainer\fR 4
+.IX Item "Pod::Plainer"
+Upgraded from version 0.01 to 1.02.
+.Sp
+NOTE: \f(CW\*(C`Pod::Plainer\*(C'\fR is deprecated and may be removed from a future
+version of Perl.
+.ie n .IP """Pod::Simple""" 4
+.el .IP \f(CWPod::Simple\fR 4
+.IX Item "Pod::Simple"
+Upgraded from version 3.05 to 3.13.
+.ie n .IP """Safe""" 4
+.el .IP \f(CWSafe\fR 4
+.IX Item "Safe"
+Upgraded from version 2.12 to 2.22.
+.ie n .IP """SelfLoader""" 4
+.el .IP \f(CWSelfLoader\fR 4
+.IX Item "SelfLoader"
+Upgraded from version 1.11 to 1.17.
+.ie n .IP """Storable""" 4
+.el .IP \f(CWStorable\fR 4
+.IX Item "Storable"
+Upgraded from version 2.18 to 2.22.
+.ie n .IP """Switch""" 4
+.el .IP \f(CWSwitch\fR 4
+.IX Item "Switch"
+Upgraded from version 2.13 to 2.16.
+.Sp
+NOTE: \f(CW\*(C`Switch\*(C'\fR is deprecated and may be removed from a future version
+of Perl.
+.ie n .IP """Sys::Syslog""" 4
+.el .IP \f(CWSys::Syslog\fR 4
+.IX Item "Sys::Syslog"
+Upgraded from version 0.22 to 0.27.
+.ie n .IP """Term::ANSIColor""" 4
+.el .IP \f(CWTerm::ANSIColor\fR 4
+.IX Item "Term::ANSIColor"
+Upgraded from version 1.12 to 2.02.
+.ie n .IP """Term::UI""" 4
+.el .IP \f(CWTerm::UI\fR 4
+.IX Item "Term::UI"
+Upgraded from version 0.18 to 0.20.
+.ie n .IP """Test""" 4
+.el .IP \f(CWTest\fR 4
+.IX Item "Test"
+Upgraded from version 1.25 to 1.25_02.
+.ie n .IP """Test::Harness""" 4
+.el .IP \f(CWTest::Harness\fR 4
+.IX Item "Test::Harness"
+Upgraded from version 2.64 to 3.17.
+.ie n .IP """Test::Simple""" 4
+.el .IP \f(CWTest::Simple\fR 4
+.IX Item "Test::Simple"
+Upgraded from version 0.72 to 0.94.
+.ie n .IP """Text::Balanced""" 4
+.el .IP \f(CWText::Balanced\fR 4
+.IX Item "Text::Balanced"
+Upgraded from version 2.0.0 to 2.02.
+.ie n .IP """Text::ParseWords""" 4
+.el .IP \f(CWText::ParseWords\fR 4
+.IX Item "Text::ParseWords"
+Upgraded from version 3.26 to 3.27.
+.ie n .IP """Text::Soundex""" 4
+.el .IP \f(CWText::Soundex\fR 4
+.IX Item "Text::Soundex"
+Upgraded from version 3.03 to 3.03_01.
+.ie n .IP """Thread::Queue""" 4
+.el .IP \f(CWThread::Queue\fR 4
+.IX Item "Thread::Queue"
+Upgraded from version 2.00 to 2.11.
+.ie n .IP """Thread::Semaphore""" 4
+.el .IP \f(CWThread::Semaphore\fR 4
+.IX Item "Thread::Semaphore"
+Upgraded from version 2.01 to 2.09.
+.ie n .IP """Tie::RefHash""" 4
+.el .IP \f(CWTie::RefHash\fR 4
+.IX Item "Tie::RefHash"
+Upgraded from version 1.37 to 1.38.
+.ie n .IP """Time::HiRes""" 4
+.el .IP \f(CWTime::HiRes\fR 4
+.IX Item "Time::HiRes"
+Upgraded from version 1.9711 to 1.9719.
+.ie n .IP """Time::Local""" 4
+.el .IP \f(CWTime::Local\fR 4
+.IX Item "Time::Local"
+Upgraded from version 1.18 to 1.1901_01.
+.ie n .IP """Time::Piece""" 4
+.el .IP \f(CWTime::Piece\fR 4
+.IX Item "Time::Piece"
+Upgraded from version 1.12 to 1.15.
+.ie n .IP """Unicode::Collate""" 4
+.el .IP \f(CWUnicode::Collate\fR 4
+.IX Item "Unicode::Collate"
+Upgraded from version 0.52 to 0.52_01.
+.ie n .IP """Unicode::Normalize""" 4
+.el .IP \f(CWUnicode::Normalize\fR 4
+.IX Item "Unicode::Normalize"
+Upgraded from version 1.02 to 1.03.
+.ie n .IP """Win32""" 4
+.el .IP \f(CWWin32\fR 4
+.IX Item "Win32"
+Upgraded from version 0.34 to 0.39.
+.ie n .IP """Win32API::File""" 4
+.el .IP \f(CWWin32API::File\fR 4
+.IX Item "Win32API::File"
+Upgraded from version 0.1001_01 to 0.1101.
+.ie n .IP """XSLoader""" 4
+.el .IP \f(CWXSLoader\fR 4
+.IX Item "XSLoader"
+Upgraded from version 0.08 to 0.10.
+.SS "Removed Modules and Pragmata"
+.IX Subsection "Removed Modules and Pragmata"
+.ie n .IP """attrs""" 4
+.el .IP \f(CWattrs\fR 4
+.IX Item "attrs"
+Removed from the Perl core. Prior version was 1.02.
+.ie n .IP """CPAN::API::HOWTO""" 4
+.el .IP \f(CWCPAN::API::HOWTO\fR 4
+.IX Item "CPAN::API::HOWTO"
+Removed from the Perl core. Prior version was 'undef'.
+.ie n .IP """CPAN::DeferedCode""" 4
+.el .IP \f(CWCPAN::DeferedCode\fR 4
+.IX Item "CPAN::DeferedCode"
+Removed from the Perl core. Prior version was 5.50.
+.ie n .IP """CPANPLUS::inc""" 4
+.el .IP \f(CWCPANPLUS::inc\fR 4
+.IX Item "CPANPLUS::inc"
+Removed from the Perl core. Prior version was 'undef'.
+.ie n .IP """DCLsym""" 4
+.el .IP \f(CWDCLsym\fR 4
+.IX Item "DCLsym"
+Removed from the Perl core. Prior version was 1.03.
+.ie n .IP """ExtUtils::MakeMaker::bytes""" 4
+.el .IP \f(CWExtUtils::MakeMaker::bytes\fR 4
+.IX Item "ExtUtils::MakeMaker::bytes"
+Removed from the Perl core. Prior version was 6.42.
+.ie n .IP """ExtUtils::MakeMaker::vmsish""" 4
+.el .IP \f(CWExtUtils::MakeMaker::vmsish\fR 4
+.IX Item "ExtUtils::MakeMaker::vmsish"
+Removed from the Perl core. Prior version was 6.42.
+.ie n .IP """Stdio""" 4
+.el .IP \f(CWStdio\fR 4
+.IX Item "Stdio"
+Removed from the Perl core. Prior version was 2.3.
+.ie n .IP """Test::Harness::Assert""" 4
+.el .IP \f(CWTest::Harness::Assert\fR 4
+.IX Item "Test::Harness::Assert"
+Removed from the Perl core. Prior version was 0.02.
+.ie n .IP """Test::Harness::Iterator""" 4
+.el .IP \f(CWTest::Harness::Iterator\fR 4
+.IX Item "Test::Harness::Iterator"
+Removed from the Perl core. Prior version was 0.02.
+.ie n .IP """Test::Harness::Point""" 4
+.el .IP \f(CWTest::Harness::Point\fR 4
+.IX Item "Test::Harness::Point"
+Removed from the Perl core. Prior version was 0.01.
+.ie n .IP """Test::Harness::Results""" 4
+.el .IP \f(CWTest::Harness::Results\fR 4
+.IX Item "Test::Harness::Results"
+Removed from the Perl core. Prior version was 0.01.
+.ie n .IP """Test::Harness::Straps""" 4
+.el .IP \f(CWTest::Harness::Straps\fR 4
+.IX Item "Test::Harness::Straps"
+Removed from the Perl core. Prior version was 0.26_01.
+.ie n .IP """Test::Harness::Util""" 4
+.el .IP \f(CWTest::Harness::Util\fR 4
+.IX Item "Test::Harness::Util"
+Removed from the Perl core. Prior version was 0.01.
+.ie n .IP """XSSymSet""" 4
+.el .IP \f(CWXSSymSet\fR 4
+.IX Item "XSSymSet"
+Removed from the Perl core. Prior version was 1.1.
+.SS "Deprecated Modules and Pragmata"
+.IX Subsection "Deprecated Modules and Pragmata"
+See "Deprecated Modules" above.
+.SH Documentation
+.IX Header "Documentation"
+.SS "New Documentation"
+.IX Subsection "New Documentation"
+.IP \(bu 4
+perlhaiku contains instructions on how to build perl for the Haiku
+platform.
+.IP \(bu 4
+perlmroapi describes the new interface for pluggable Method Resolution
+Orders.
+.IP \(bu 4
+perlperf, by Richard Foley, provides an introduction to the use of
+performance and optimization techniques which can be used with particular
+reference to perl programs.
+.IP \(bu 4
+perlrepository describes how to access the perl source using the \fIgit\fR
+version control system.
+.IP \(bu 4
+perlpolicy extends the "Social contract about contributed modules" into
+the beginnings of a document on Perl porting policies.
+.SS "Changes to Existing Documentation"
+.IX Subsection "Changes to Existing Documentation"
+.IP \(bu 4
+The various large \fIChanges*\fR files (which listed every change made
+to perl over the last 18 years) have been removed, and replaced by a
+small file, also called \fIChanges\fR, which just explains how that same
+information may be extracted from the git version control system.
+.IP \(bu 4
+\&\fIPorting/patching.pod\fR has been deleted, as it mainly described
+interacting with the old Perforce-based repository, which is now obsolete.
+Information still relevant has been moved to perlrepository.
+.IP \(bu 4
+The syntax \f(CW\*(C`unless (EXPR) BLOCK else BLOCK\*(C'\fR is now documented as valid,
+as is the syntax \f(CW\*(C`unless (EXPR) BLOCK elsif (EXPR) BLOCK ... else
+BLOCK\*(C'\fR, although actually using the latter may not be the best idea for
+the readability of your source code.
+.IP \(bu 4
+Documented \-X overloading.
+.IP \(bu 4
+Documented that \f(CWwhen()\fR treats specially most of the filetest operators
+.IP \(bu 4
+Documented \f(CW\*(C`when\*(C'\fR as a syntax modifier.
+.IP \(bu 4
+Eliminated "Old Perl threads tutorial", which described 5005 threads.
+.Sp
+\&\fIpod/perlthrtut.pod\fR is the same material reworked for ithreads.
+.IP \(bu 4
+Correct previous documentation: v\-strings are not deprecated
+.Sp
+With version objects, we need them to use MODULE VERSION syntax. This
+patch removes the deprecation notice.
+.IP \(bu 4
+Security contact information is now part of perlsec.
+.IP \(bu 4
+A significant fraction of the core documentation has been updated to
+clarify the behavior of Perl's Unicode handling.
+.Sp
+Much of the remaining core documentation has been reviewed and edited
+for clarity, consistent use of language, and to fix the spelling of Tom
+Christiansen's name.
+.IP \(bu 4
+The Pod specification (perlpodspec) has been updated to bring the
+specification in line with modern usage already supported by most Pod
+systems. A parameter string may now follow the format name in a
+"begin/end" region. Links to URIs with a text description are now
+allowed. The usage of \f(CW\*(C`L<"section">\*(C'\fR has been marked as
+deprecated.
+.IP \(bu 4
+if.pm has been documented in "use" in perlfunc as a means to get
+conditional loading of modules despite the implicit BEGIN block around
+\&\f(CW\*(C`use\*(C'\fR.
+.IP \(bu 4
+The documentation for \f(CW$1\fR in perlvar.pod has been clarified.
+.IP \(bu 4
+\&\f(CW\*(C`\eN{U+\fR\f(CIcode point\fR\f(CW}\*(C'\fR is now documented.
+.SH "Selected Performance Enhancements"
+.IX Header "Selected Performance Enhancements"
+.IP \(bu 4
+A new internal cache means that \f(CWisa()\fR will often be faster.
+.IP \(bu 4
+The implementation of \f(CW\*(C`C3\*(C'\fR Method Resolution Order has been
+optimised \- linearisation for classes with single inheritance is 40%
+faster. Performance for multiple inheritance is unchanged.
+.IP \(bu 4
+Under \f(CW\*(C`use locale\*(C'\fR, the locale-relevant information is now cached on
+read-only values, such as the list returned by \f(CW\*(C`keys %hash\*(C'\fR. This makes
+operations such as \f(CW\*(C`sort keys %hash\*(C'\fR in the scope of \f(CW\*(C`use locale\*(C'\fR
+much faster.
+.IP \(bu 4
+Empty \f(CW\*(C`DESTROY\*(C'\fR methods are no longer called.
+.IP \(bu 4
+\&\f(CWPerl_sv_utf8_upgrade()\fR is now faster.
+.IP \(bu 4
+\&\f(CW\*(C`keys\*(C'\fR on empty hash is now faster.
+.IP \(bu 4
+\&\f(CW\*(C`if (%foo)\*(C'\fR has been optimized to be faster than \f(CW\*(C`if (keys %foo)\*(C'\fR.
+.IP \(bu 4
+The string repetition operator (\f(CW\*(C`$str x $num\*(C'\fR) is now several times
+faster when \f(CW$str\fR has length one or \f(CW$num\fR is large.
+.IP \(bu 4
+Reversing an array to itself (as in \f(CW\*(C`@a = reverse @a\*(C'\fR) in void context
+now happens in-place and is several orders of magnitude faster than
+it used to be. It will also preserve non-existent elements whenever
+possible, i.e. for non magical arrays or tied arrays with \f(CW\*(C`EXISTS\*(C'\fR
+and \f(CW\*(C`DELETE\*(C'\fR methods.
+.SH "Installation and Configuration Improvements"
+.IX Header "Installation and Configuration Improvements"
+.IP \(bu 4
+perlapi, perlintern, perlmodlib and perltoc are now all
+generated at build time, rather than being shipped as part of the release.
+.IP \(bu 4
+If \f(CW\*(C`vendorlib\*(C'\fR and \f(CW\*(C`vendorarch\*(C'\fR are the same, then they are only added
+to \f(CW@INC\fR once.
+.IP \(bu 4
+\&\f(CW$Config{usedevel}\fR and the C\-level \f(CW\*(C`PERL_USE_DEVEL\*(C'\fR are now defined if
+perl is built with \f(CW\*(C`\-Dusedevel\*(C'\fR.
+.IP \(bu 4
+\&\fIConfigure\fR will enable use of \f(CW\*(C`\-fstack\-protector\*(C'\fR, to provide protection
+against stack-smashing attacks, if the compiler supports it.
+.IP \(bu 4
+\&\fIConfigure\fR will now determine the correct prototypes for re-entrant
+functions and for \f(CW\*(C`gconvert\*(C'\fR if you are using a C++ compiler rather
+than a C compiler.
+.IP \(bu 4
+On Unix, if you build from a tree containing a git repository, the
+configuration process will note the commit hash you have checked out, for
+display in the output of \f(CW\*(C`perl \-v\*(C'\fR and \f(CW\*(C`perl \-V\*(C'\fR. Unpushed local commits
+are automatically added to the list of local patches displayed by
+\&\f(CW\*(C`perl \-V\*(C'\fR.
+.IP \(bu 4
+Perl now supports SystemTap's \f(CW\*(C`dtrace\*(C'\fR compatibility layer and an
+issue with linking \f(CW\*(C`miniperl\*(C'\fR has been fixed in the process.
+.IP \(bu 4
+perldoc now uses \f(CW\*(C`less \-R\*(C'\fR instead of \f(CW\*(C`less\*(C'\fR for improved behaviour
+in the face of \f(CW\*(C`groff\*(C'\fR's new usage of ANSI escape codes.
+.IP \(bu 4
+\&\f(CW\*(C`perl \-V\*(C'\fR now reports use of the compile-time options \f(CW\*(C`USE_PERL_ATOF\*(C'\fR and
+\&\f(CW\*(C`USE_ATTRIBUTES_FOR_PERLIO\*(C'\fR.
+.IP \(bu 4
+As part of the flattening of \fIext\fR, all extensions on all platforms are
+built by \fImake_ext.pl\fR. This replaces the Unix-specific
+\&\fIext/util/make_ext\fR, VMS-specific \fImake_ext.com\fR and Win32\-specific
+\&\fIwin32/buildext.pl\fR.
+.SH "Internal Changes"
+.IX Header "Internal Changes"
+Each release of Perl sees numerous internal changes which shouldn't
+affect day to day usage but may still be notable for developers working
+with Perl's source code.
+.IP \(bu 4
+The J.R.R. Tolkien quotes at the head of C source file have been checked
+and proper citations added, thanks to a patch from Tom Christiansen.
+.IP \(bu 4
+The internal structure of the dual-life modules traditionally found in
+the \fIlib/\fR and \fIext/\fR directories in the perl source has changed
+significantly. Where possible, dual-lifed modules have been extracted
+from \fIlib/\fR and \fIext/\fR.
+.Sp
+Dual-lifed modules maintained by Perl's developers as part of the Perl
+core now live in \fIdist/\fR. Dual-lifed modules maintained primarily on
+CPAN now live in \fIcpan/\fR. When reporting a bug in a module located
+under \fIcpan/\fR, please send your bug report directly to the module's
+bug tracker or author, rather than Perl's bug tracker.
+.IP \(bu 4
+\&\f(CW\*(C`\eN{...}\*(C'\fR now compiles better, always forces UTF\-8 internal representation
+.Sp
+Perl's developers have fixed several problems with the recognition of
+\&\f(CW\*(C`\eN{...}\*(C'\fR constructs. As part of this, perl will store any scalar
+or regex containing \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR or \f(CW\*(C`\eN{U+\fR\f(CIcode point\fR\f(CW}\*(C'\fR in its
+definition in UTF\-8 format. (This was true previously for all occurrences
+of \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR that did not use a custom translator, but now it's
+always true.)
+.IP \(bu 4
+Perl_magic_setmglob now knows about globs, fixing RT #71254.
+.IP \(bu 4
+\&\f(CW\*(C`SVt_RV\*(C'\fR no longer exists. RVs are now stored in IVs.
+.IP \(bu 4
+\&\f(CWPerl_vcroak()\fR now accepts a null first argument. In addition, a full
+audit was made of the "not NULL" compiler annotations, and those for
+several other internal functions were corrected.
+.IP \(bu 4
+New macros \f(CW\*(C`dSAVEDERRNO\*(C'\fR, \f(CW\*(C`dSAVE_ERRNO\*(C'\fR, \f(CW\*(C`SAVE_ERRNO\*(C'\fR, \f(CW\*(C`RESTORE_ERRNO\*(C'\fR
+have been added to formalise the temporary saving of the \f(CW\*(C`errno\*(C'\fR
+variable.
+.IP \(bu 4
+The function \f(CW\*(C`Perl_sv_insert_flags\*(C'\fR has been added to augment
+\&\f(CW\*(C`Perl_sv_insert\*(C'\fR.
+.IP \(bu 4
+The function \f(CWPerl_newSV_type(type)\fR has been added, equivalent to
+\&\f(CWPerl_newSV()\fR followed by \f(CWPerl_sv_upgrade(type)\fR.
+.IP \(bu 4
+The function \f(CWPerl_newSVpvn_flags()\fR has been added, equivalent to
+\&\f(CWPerl_newSVpvn()\fR and then performing the action relevant to the flag.
+.Sp
+Two flag bits are currently supported.
+.RS 4
+.IP \(bu 4
+\&\f(CW\*(C`SVf_UTF8\*(C'\fR will call \f(CWSvUTF8_on()\fR for you. (Note that this does
+not convert a sequence of ISO 8859\-1 characters to UTF\-8). A wrapper,
+\&\f(CWnewSVpvn_utf8()\fR is available for this.
+.IP \(bu 4
+\&\f(CW\*(C`SVs_TEMP\*(C'\fR now calls \f(CWPerl_sv_2mortal()\fR on the new SV.
+.RE
+.RS 4
+.Sp
+There is also a wrapper that takes constant strings, \f(CWnewSVpvs_flags()\fR.
+.RE
+.IP \(bu 4
+The function \f(CW\*(C`Perl_croak_xs_usage\*(C'\fR has been added as a wrapper to
+\&\f(CW\*(C`Perl_croak\*(C'\fR.
+.IP \(bu 4
+Perl now exports the functions \f(CW\*(C`PerlIO_find_layer\*(C'\fR and \f(CW\*(C`PerlIO_list_alloc\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`PL_na\*(C'\fR has been exterminated from the core code, replaced by local
+STRLEN temporaries, or \f(CW*_nolen()\fR calls. Either approach is faster than
+\&\f(CW\*(C`PL_na\*(C'\fR, which is a pointer dereference into the interpreter structure
+under ithreads, and a global variable otherwise.
+.IP \(bu 4
+\&\f(CWPerl_mg_free()\fR used to leave freed memory accessible via \f(CWSvMAGIC()\fR
+on the scalar. It now updates the linked list to remove each piece of
+magic as it is freed.
+.IP \(bu 4
+Under ithreads, the regex in \f(CW\*(C`PL_reg_curpm\*(C'\fR is now reference
+counted. This eliminates a lot of hackish workarounds to cope with it
+not being reference counted.
+.IP \(bu 4
+\&\f(CWPerl_mg_magical()\fR would sometimes incorrectly turn on \f(CWSvRMAGICAL()\fR.
+This has been fixed.
+.IP \(bu 4
+The \fIpublic\fR IV and NV flags are now not set if the string value has
+trailing "garbage". This behaviour is consistent with not setting the
+public IV or NV flags if the value is out of range for the type.
+.IP \(bu 4
+Uses of \f(CW\*(C`Nullav\*(C'\fR, \f(CW\*(C`Nullcv\*(C'\fR, \f(CW\*(C`Nullhv\*(C'\fR, \f(CW\*(C`Nullop\*(C'\fR, \f(CW\*(C`Nullsv\*(C'\fR etc have
+been replaced by \f(CW\*(C`NULL\*(C'\fR in the core code, and non-dual-life modules,
+as \f(CW\*(C`NULL\*(C'\fR is clearer to those unfamiliar with the core code.
+.IP \(bu 4
+A macro \f(CWMUTABLE_PTR(p)\fR has been added, which on (non-pedantic) gcc will
+not cast away \f(CW\*(C`const\*(C'\fR, returning a \f(CW\*(C`void *\*(C'\fR. Macros \f(CWMUTABLE_SV(av)\fR,
+\&\f(CWMUTABLE_SV(cv)\fR etc build on this, casting to \f(CW\*(C`AV *\*(C'\fR etc without
+casting away \f(CW\*(C`const\*(C'\fR. This allows proper compile-time auditing of
+\&\f(CW\*(C`const\*(C'\fR correctness in the core, and helped picked up some errors
+(now fixed).
+.IP \(bu 4
+Macros \f(CWmPUSHs()\fR and \f(CWmXPUSHs()\fR have been added, for pushing SVs on the
+stack and mortalizing them.
+.IP \(bu 4
+Use of the private structure \f(CW\*(C`mro_meta\*(C'\fR has changed slightly. Nothing
+outside the core should be accessing this directly anyway.
+.IP \(bu 4
+A new tool, \fIPorting/expand\-macro.pl\fR has been added, that allows you
+to view how a C preprocessor macro would be expanded when compiled.
+This is handy when trying to decode the macro hell that is the perl
+guts.
+.SH Testing
+.IX Header "Testing"
+.SS "Testing improvements"
+.IX Subsection "Testing improvements"
+.IP "Parallel tests" 4
+.IX Item "Parallel tests"
+The core distribution can now run its regression tests in parallel on
+Unix-like platforms. Instead of running \f(CW\*(C`make test\*(C'\fR, set \f(CW\*(C`TEST_JOBS\*(C'\fR in
+your environment to the number of tests to run in parallel, and run
+\&\f(CW\*(C`make test_harness\*(C'\fR. On a Bourne-like shell, this can be done as
+.Sp
+.Vb 1
+\& TEST_JOBS=3 make test_harness # Run 3 tests in parallel
+.Ve
+.Sp
+An environment variable is used, rather than parallel make itself, because
+TAP::Harness needs to be able to schedule individual non-conflicting test
+scripts itself, and there is no standard interface to \f(CW\*(C`make\*(C'\fR utilities to
+interact with their job schedulers.
+.Sp
+Note that currently some test scripts may fail when run in parallel (most
+notably \f(CW\*(C`ext/IO/t/io_dir.t\*(C'\fR). If necessary run just the failing scripts
+again sequentially and see if the failures go away.
+.IP "Test harness flexibility" 4
+.IX Item "Test harness flexibility"
+It's now possible to override \f(CW\*(C`PERL5OPT\*(C'\fR and friends in \fIt/TEST\fR
+.IP "Test watchdog" 4
+.IX Item "Test watchdog"
+Several tests that have the potential to hang forever if they fail now
+incorporate a "watchdog" functionality that will kill them after a timeout,
+which helps ensure that \f(CW\*(C`make test\*(C'\fR and \f(CW\*(C`make test_harness\*(C'\fR run to
+completion automatically.
+.SS "New Tests"
+.IX Subsection "New Tests"
+Perl's developers have added a number of new tests to the core.
+In addition to the items listed below, many modules updated from CPAN
+incorporate new tests.
+.IP \(bu 4
+Significant cleanups to core tests to ensure that language and
+interpreter features are not used before they're tested.
+.IP \(bu 4
+\&\f(CW\*(C`make test_porting\*(C'\fR now runs a number of important pre-commit checks
+which might be of use to anyone working on the Perl core.
+.IP \(bu 4
+\&\fIt/porting/podcheck.t\fR automatically checks the well-formedness of
+POD found in all .pl, .pm and .pod files in the \fIMANIFEST\fR, other than in
+dual-lifed modules which are primarily maintained outside the Perl core.
+.IP \(bu 4
+\&\fIt/porting/manifest.t\fR now tests that all files listed in MANIFEST
+are present.
+.IP \(bu 4
+\&\fIt/op/while_readdir.t\fR tests that a bare readdir in while loop sets \f(CW$_\fR.
+.IP \(bu 4
+\&\fIt/comp/retainedlines.t\fR checks that the debugger can retain source
+lines from \f(CW\*(C`eval\*(C'\fR.
+.IP \(bu 4
+\&\fIt/io/perlio_fail.t\fR checks that bad layers fail.
+.IP \(bu 4
+\&\fIt/io/perlio_leaks.t\fR checks that PerlIO layers are not leaking.
+.IP \(bu 4
+\&\fIt/io/perlio_open.t\fR checks that certain special forms of open work.
+.IP \(bu 4
+\&\fIt/io/perlio.t\fR includes general PerlIO tests.
+.IP \(bu 4
+\&\fIt/io/pvbm.t\fR checks that there is no unexpected interaction between
+the internal types \f(CW\*(C`PVBM\*(C'\fR and \f(CW\*(C`PVGV\*(C'\fR.
+.IP \(bu 4
+\&\fIt/mro/package_aliases.t\fR checks that mro works properly in the presence
+of aliased packages.
+.IP \(bu 4
+\&\fIt/op/dbm.t\fR tests \f(CW\*(C`dbmopen\*(C'\fR and \f(CW\*(C`dbmclose\*(C'\fR.
+.IP \(bu 4
+\&\fIt/op/index_thr.t\fR tests the interaction of \f(CW\*(C`index\*(C'\fR and threads.
+.IP \(bu 4
+\&\fIt/op/pat_thr.t\fR tests the interaction of esoteric patterns and threads.
+.IP \(bu 4
+\&\fIt/op/qr_gc.t\fR tests that \f(CW\*(C`qr\*(C'\fR doesn't leak.
+.IP \(bu 4
+\&\fIt/op/reg_email_thr.t\fR tests the interaction of regex recursion and threads.
+.IP \(bu 4
+\&\fIt/op/regexp_qr_embed_thr.t\fR tests the interaction of patterns with
+embedded \f(CW\*(C`qr//\*(C'\fR and threads.
+.IP \(bu 4
+\&\fIt/op/regexp_unicode_prop.t\fR tests Unicode properties in regular
+expressions.
+.IP \(bu 4
+\&\fIt/op/regexp_unicode_prop_thr.t\fR tests the interaction of Unicode
+properties and threads.
+.IP \(bu 4
+\&\fIt/op/reg_nc_tie.t\fR tests the tied methods of \f(CW\*(C`Tie::Hash::NamedCapture\*(C'\fR.
+.IP \(bu 4
+\&\fIt/op/reg_posixcc.t\fR checks that POSIX character classes behave
+consistently.
+.IP \(bu 4
+\&\fIt/op/re.t\fR checks that exportable \f(CW\*(C`re\*(C'\fR functions in \fIuniversal.c\fR work.
+.IP \(bu 4
+\&\fIt/op/setpgrpstack.t\fR checks that \f(CW\*(C`setpgrp\*(C'\fR works.
+.IP \(bu 4
+\&\fIt/op/substr_thr.t\fR tests the interaction of \f(CW\*(C`substr\*(C'\fR and threads.
+.IP \(bu 4
+\&\fIt/op/upgrade.t\fR checks that upgrading and assigning scalars works.
+.IP \(bu 4
+\&\fIt/uni/lex_utf8.t\fR checks that Unicode in the lexer works.
+.IP \(bu 4
+\&\fIt/uni/tie.t\fR checks that Unicode and \f(CW\*(C`tie\*(C'\fR work.
+.IP \(bu 4
+\&\fIt/comp/final_line_num.t\fR tests whether line numbers are correct at EOF
+.IP \(bu 4
+\&\fIt/comp/form_scope.t\fR tests format scoping.
+.IP \(bu 4
+\&\fIt/comp/line_debug.t\fR tests whether \f(CW\*(C`@{"_<$file"}\*(C'\fR works.
+.IP \(bu 4
+\&\fIt/op/filetest_t.t\fR tests if \-t file test works.
+.IP \(bu 4
+\&\fIt/op/qr.t\fR tests \f(CW\*(C`qr\*(C'\fR.
+.IP \(bu 4
+\&\fIt/op/utf8cache.t\fR tests malfunctions of the utf8 cache.
+.IP \(bu 4
+\&\fIt/re/uniprops.t\fR test unicodes \f(CW\*(C`\ep{}\*(C'\fR regex constructs.
+.IP \(bu 4
+\&\fIt/op/filehandle.t\fR tests some suitably portable filetest operators
+to check that they work as expected, particularly in the light of some
+internal changes made in how filehandles are blessed.
+.IP \(bu 4
+\&\fIt/op/time_loop.t\fR tests that unix times greater than \f(CW\*(C`2**63\*(C'\fR, which
+can now be handed to \f(CW\*(C`gmtime\*(C'\fR and \f(CW\*(C`localtime\*(C'\fR, do not cause an internal
+overflow or an excessively long loop.
+.SH "New or Changed Diagnostics"
+.IX Header "New or Changed Diagnostics"
+.SS "New Diagnostics"
+.IX Subsection "New Diagnostics"
+.IP \(bu 4
+SV allocation tracing has been added to the diagnostics enabled by \f(CW\*(C`\-Dm\*(C'\fR.
+The tracing can alternatively output via the \f(CW\*(C`PERL_MEM_LOG\*(C'\fR mechanism, if
+that was enabled when the \fIperl\fR binary was compiled.
+.IP \(bu 4
+Smartmatch resolution tracing has been added as a new diagnostic. Use
+\&\f(CW\*(C`\-DM\*(C'\fR to enable it.
+.IP \(bu 4
+A new debugging flag \f(CW\*(C`\-DB\*(C'\fR now dumps subroutine definitions, leaving
+\&\f(CW\*(C`\-Dx\*(C'\fR for its original purpose of dumping syntax trees.
+.IP \(bu 4
+Perl 5.12 provides a number of new diagnostic messages to help you write
+better code. See perldiag for details of these new messages.
+.RS 4
+.IP \(bu 4
+\&\f(CW\*(C`Bad plugin affecting keyword \*(Aq%s\*(Aq\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`gmtime(%.0f) too large\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Lexing code attempted to stuff non\-Latin\-1 character into Latin\-1 input\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Lexing code internal error (%s)\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`localtime(%.0f) too large\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Overloaded dereference did not return a reference\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Overloaded qr did not return a REGEXP\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Perl_pmflag() is deprecated, and will be removed from the XS API\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`lvalue attribute ignored after the subroutine has been defined\*(C'\fR
+.Sp
+This new warning is issued when one attempts to mark a subroutine as
+lvalue after it has been defined.
+.IP \(bu 4
+Perl now warns you if \f(CW\*(C`++\*(C'\fR or \f(CW\*(C`\-\-\*(C'\fR are unable to change the value
+because it's beyond the limit of representation.
+.Sp
+This uses a new warnings category: "imprecision".
+.IP \(bu 4
+\&\f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR, and \f(CW\*(C`ucfirst\*(C'\fR warn when passed undef.
+.IP \(bu 4
+\&\f(CW\*(C`Show constant in "Useless use of a constant in void context"\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Prototype after \*(Aq%s\*(Aq\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`panic: sv_chop %s\*(C'\fR
+.Sp
+This new fatal error occurs when the C routine \f(CWPerl_sv_chop()\fR was
+passed a position that is not within the scalar's string buffer. This
+could be caused by buggy XS code, and at this point recovery is not
+possible.
+.IP \(bu 4
+The fatal error \f(CW\*(C`Malformed UTF\-8 returned by \eN\*(C'\fR is now produced if the
+\&\f(CW\*(C`charnames\*(C'\fR handler returns malformed UTF\-8.
+.IP \(bu 4
+If an unresolved named character or sequence was encountered when
+compiling a regex pattern then the fatal error \f(CW\*(C`\eN{NAME} must be resolved
+by the lexer\*(C'\fR is now produced. This can happen, for example, when using a
+single-quotish context like \f(CW\*(C`$re = \*(Aq\eN{SPACE}\*(Aq; /$re/;\*(C'\fR. See perldiag
+for more examples of how the lexer can get bypassed.
+.IP \(bu 4
+\&\f(CW\*(C`Invalid hexadecimal number in \eN{U+...}\*(C'\fR is a new fatal error
+triggered when the character constant represented by \f(CW\*(C`...\*(C'\fR is not a
+valid hexadecimal number.
+.IP \(bu 4
+The new meaning of \f(CW\*(C`\eN\*(C'\fR as \f(CW\*(C`[^\en]\*(C'\fR is not valid in a bracketed character
+class, just like \f(CW\*(C`.\*(C'\fR in a character class loses its special meaning,
+and will cause the fatal error \f(CW\*(C`\eN in a character class must be a named
+character: \eN{...}\*(C'\fR.
+.IP \(bu 4
+The rules on what is legal for the \f(CW\*(C`...\*(C'\fR in \f(CW\*(C`\eN{...}\*(C'\fR have been
+tightened up so that unless the \f(CW\*(C`...\*(C'\fR begins with an alphabetic
+character and continues with a combination of alphanumerics, dashes,
+spaces, parentheses or colons then the warning \f(CW\*(C`Deprecated character(s)
+in \eN{...} starting at \*(Aq%s\*(Aq\*(C'\fR is now issued.
+.IP \(bu 4
+The warning \f(CW\*(C`Using just the first characters returned by \eN{}\*(C'\fR will
+be issued if the \f(CW\*(C`charnames\*(C'\fR handler returns a sequence of characters
+which exceeds the limit of the number of characters that can be used. The
+message will indicate which characters were used and which were discarded.
+.RE
+.RS 4
+.RE
+.SS "Changed Diagnostics"
+.IX Subsection "Changed Diagnostics"
+A number of existing diagnostic messages have been improved or corrected:
+.IP \(bu 4
+A new warning category \f(CW\*(C`illegalproto\*(C'\fR allows finer-grained control of
+warnings around function prototypes.
+.Sp
+The two warnings:
+.RS 4
+.ie n .IP """Illegal character in prototype for %s : %s""" 4
+.el .IP "\f(CWIllegal character in prototype for %s : %s\fR" 4
+.IX Item "Illegal character in prototype for %s : %s"
+.PD 0
+.ie n .IP """Prototype after \*(Aq%c\*(Aq for %s : %s""" 4
+.el .IP "\f(CWPrototype after \*(Aq%c\*(Aq for %s : %s\fR" 4
+.IX Item "Prototype after %c for %s : %s"
+.RE
+.RS 4
+.PD
+.Sp
+have been moved from the \f(CW\*(C`syntax\*(C'\fR top-level warnings category into a new
+first-level category, \f(CW\*(C`illegalproto\*(C'\fR. These two warnings are currently
+the only ones emitted during parsing of an invalid/illegal prototype,
+so one can now use
+.Sp
+.Vb 1
+\& no warnings \*(Aqillegalproto\*(Aq;
+.Ve
+.Sp
+to suppress only those, but not other syntax-related warnings. Warnings
+where prototypes are changed, ignored, or not met are still in the
+\&\f(CW\*(C`prototype\*(C'\fR category as before.
+.RE
+.IP \(bu 4
+\&\f(CW\*(C`Deep recursion on subroutine "%s"\*(C'\fR
+.Sp
+It is now possible to change the depth threshold for this warning from the
+default of 100, by recompiling the \fIperl\fR binary, setting the C
+pre-processor macro \f(CW\*(C`PERL_SUB_DEPTH_WARN\*(C'\fR to the desired value.
+.IP \(bu 4
+\&\f(CW\*(C`Illegal character in prototype\*(C'\fR warning is now more precise
+when reporting illegal characters after _
+.IP \(bu 4
+mro merging error messages are now very similar to those produced by
+Algorithm::C3.
+.IP \(bu 4
+Amelioration of the error message "Unrecognized character \f(CW%s\fR in column \f(CW%d\fR"
+.Sp
+Changes the error message to "Unrecognized character \f(CW%s\fR; marked by <\-\-
+HERE after \f(CW%s\fR<\-\- HERE near column \f(CW%d\fR". This should make it a little
+simpler to spot and correct the suspicious character.
+.IP \(bu 4
+Perl now explicitly points to \f(CW$.\fR when it causes an uninitialized
+warning for ranges in scalar context.
+.IP \(bu 4
+\&\f(CW\*(C`split\*(C'\fR now warns when called in void context.
+.IP \(bu 4
+\&\f(CW\*(C`printf\*(C'\fR\-style functions called with too few arguments will now issue the
+warning \f(CW"Missing argument in %s"\fR [perl #71000]
+.IP \(bu 4
+Perl now properly returns a syntax error instead of segfaulting
+if \f(CW\*(C`each\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, or \f(CW\*(C`values\*(C'\fR is used without an argument.
+.IP \(bu 4
+\&\f(CWtell()\fR now fails properly if called without an argument and when no
+previous file was read.
+.Sp
+\&\f(CWtell()\fR now returns \f(CW\-1\fR, and sets errno to \f(CW\*(C`EBADF\*(C'\fR, thus restoring
+the 5.8.x behaviour.
+.IP \(bu 4
+\&\f(CW\*(C`overload\*(C'\fR no longer implicitly unsets fallback on repeated 'use
+overload' lines.
+.IP \(bu 4
+\&\fBPOSIX::strftime()\fR can now handle Unicode characters in the format string.
+.IP \(bu 4
+The \f(CW\*(C`syntax\*(C'\fR category was removed from 5 warnings that should only be in
+\&\f(CW\*(C`deprecated\*(C'\fR.
+.IP \(bu 4
+Three fatal \f(CW\*(C`pack\*(C'\fR/\f(CW\*(C`unpack\*(C'\fR error messages have been normalized to
+\&\f(CW\*(C`panic: %s\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Unicode character is illegal\*(C'\fR has been rephrased to be more accurate
+.Sp
+It now reads \f(CW\*(C`Unicode non\-character is illegal in interchange\*(C'\fR and the
+perldiag documentation has been expanded a bit.
+.IP \(bu 4
+Currently, all but the first of the several characters that the
+\&\f(CW\*(C`charnames\*(C'\fR handler may return are discarded when used in a regular
+expression pattern bracketed character class. If this happens then the
+warning \f(CW\*(C`Using just the first character returned by \eN{} in character
+class\*(C'\fR will be issued.
+.IP \(bu 4
+The warning \f(CW\*(C`Missing right brace on \eN{} or unescaped left brace after
+\&\eN. Assuming the latter\*(C'\fR will be issued if Perl encounters a \f(CW\*(C`\eN{\*(C'\fR
+but doesn't find a matching \f(CW\*(C`}\*(C'\fR. In this case Perl doesn't know if it
+was mistakenly omitted, or if "match non-newline" followed by "match
+a \f(CW\*(C`{\*(C'\fR" was desired. It assumes the latter because that is actually a
+valid interpretation as written, unlike the other case. If you meant
+the former, you need to add the matching right brace. If you did mean
+the latter, you can silence this warning by writing instead \f(CW\*(C`\eN\e{\*(C'\fR.
+.IP \(bu 4
+\&\f(CW\*(C`gmtime\*(C'\fR and \f(CW\*(C`localtime\*(C'\fR called with numbers smaller than they can
+reliably handle will now issue the warnings \f(CW\*(C`gmtime(%.0f) too small\*(C'\fR
+and \f(CW\*(C`localtime(%.0f) too small\*(C'\fR.
+.PP
+The following diagnostic messages have been removed:
+.IP \(bu 4
+\&\f(CW\*(C`Runaway format\*(C'\fR
+.IP \(bu 4
+\&\f(CW\*(C`Can\*(Aqt locate package %s for the parents of %s\*(C'\fR
+.Sp
+In general this warning it only got produced in
+conjunction with other warnings, and removing it allowed an ISA lookup
+optimisation to be added.
+.IP \(bu 4
+\&\f(CW\*(C`v\-string in use/require is non\-portable\*(C'\fR
+.SH "Utility Changes"
+.IX Header "Utility Changes"
+.IP \(bu 4
+\&\fIh2ph\fR now looks in \f(CW\*(C`include\-fixed\*(C'\fR too, which is a recent addition
+to gcc's search path.
+.IP \(bu 4
+\&\fIh2xs\fR no longer incorrectly treats enum values like macros.
+It also now handles C++ style comments (\f(CW\*(C`//\*(C'\fR) properly in enums.
+.IP \(bu 4
+\&\fIperl5db.pl\fR now supports \f(CW\*(C`LVALUE\*(C'\fR subroutines. Additionally, the
+debugger now correctly handles proxy constant subroutines, and
+subroutine stubs.
+.IP \(bu 4
+\&\fIperlbug\fR now uses \f(CW%Module::CoreList::bug_tracker\fR to print out
+upstream bug tracker URLs. If a user identifies a particular module
+as the topic of their bug report and we're able to divine the URL for
+its upstream bug tracker, perlbug now provide a message to the user
+explaining that the core copies the CPAN version directly, and provide
+the URL for reporting the bug directly to the upstream author.
+.Sp
+\&\fIperlbug\fR no longer reports "Message sent" when it hasn't actually sent
+the message
+.IP \(bu 4
+\&\fIperlthanks\fR is a new utility for sending non-bug-reports to the
+authors and maintainers of Perl. Getting nothing but bug reports can
+become a bit demoralising. If Perl 5.12 works well for you, please try
+out \fIperlthanks\fR. It will make the developers smile.
+.IP \(bu 4
+Perl's developers have fixed bugs in \fIa2p\fR having to do with the
+\&\f(CWmatch()\fR operator in list context. Additionally, \fIa2p\fR no longer
+generates code that uses the \f(CW$[\fR variable.
+.SH "Selected Bug Fixes"
+.IX Header "Selected Bug Fixes"
+.IP \(bu 4
+U+0FFFF is now a legal character in regular expressions.
+.IP \(bu 4
+pp_qr now always returns a new regexp SV. Resolves RT #69852.
+.Sp
+Instead of returning a(nother) reference to the (pre-compiled) regexp
+in the optree, use \fBreg_temp_copy()\fR to create a copy of it, and return a
+reference to that. This resolves issues about Regexp::DESTROY not being
+called in a timely fashion (the original bug tracked by RT #69852), as
+well as bugs related to blessing regexps, and of assigning to regexps,
+as described in correspondence added to the ticket.
+.Sp
+It transpires that we also need to undo the \fBSvPVX()\fR sharing when ithreads
+cloning a Regexp SV, because mother_re is set to NULL, instead of a
+cloned copy of the mother_re. This change might fix bugs with regexps
+and threads in certain other situations, but as yet neither tests nor
+bug reports have indicated any problems, so it might not actually be an
+edge case that it's possible to reach.
+.IP \(bu 4
+Several compilation errors and segfaults when perl was built with \f(CW\*(C`\-Dmad\*(C'\fR
+were fixed.
+.IP \(bu 4
+Fixes for lexer API changes in 5.11.2 which broke NYTProf's savesrc option.
+.IP \(bu 4
+\&\f(CW\*(C`\-t\*(C'\fR should only return TRUE for file handles connected to a TTY
+.Sp
+The Microsoft C version of \f(CWisatty()\fR returns TRUE for all character mode
+devices, including the \fI/dev/null\fR\-style "nul" device and printers like
+"lpt1".
+.IP \(bu 4
+Fixed a regression caused by commit fafafbaf which caused a panic during
+parameter passing [perl #70171]
+.IP \(bu 4
+On systems which in-place edits without backup files, \-i'*' now works as
+the documentation says it does [perl #70802]
+.IP \(bu 4
+Saving and restoring magic flags no longer loses readonly flag.
+.IP \(bu 4
+The malformed syntax \f(CW\*(C`grep EXPR LIST\*(C'\fR (note the missing comma) no longer
+causes abrupt and total failure.
+.IP \(bu 4
+Regular expressions compiled with \f(CW\*(C`qr{}\*(C'\fR literals properly set \f(CW\*(C`$\*(Aq\*(C'\fR when
+matching again.
+.IP \(bu 4
+Using named subroutines with \f(CW\*(C`sort\*(C'\fR should no longer lead to bus errors
+[perl #71076]
+.IP \(bu 4
+Numerous bugfixes catch small issues caused by the recently-added Lexer API.
+.IP \(bu 4
+Smart match against \f(CW@_\fR sometimes gave false negatives. [perl #71078]
+.IP \(bu 4
+\&\f(CW$@\fR may now be assigned a read-only value (without error or busting
+the stack).
+.IP \(bu 4
+\&\f(CW\*(C`sort\*(C'\fR called recursively from within an active comparison subroutine no
+longer causes a bus error if run multiple times. [perl #71076]
+.IP \(bu 4
+Tie::Hash::NamedCapture::* will not abort if passed bad input (RT #71828)
+.IP \(bu 4
+\&\f(CW@_\fR and \f(CW$_\fR no longer leak under threads (RT #34342 and #41138, also
+#70602, #70974)
+.IP \(bu 4
+\&\f(CW\*(C`\-I\*(C'\fR on shebang line now adds directories in front of \f(CW@INC\fR
+as documented, and as does \f(CW\*(C`\-I\*(C'\fR when specified on the command-line.
+.IP \(bu 4
+\&\f(CW\*(C`kill\*(C'\fR is now fatal when called on non-numeric process identifiers.
+Previously, an \f(CW\*(C`undef\*(C'\fR process identifier would be interpreted as a
+request to kill process 0, which would terminate the current process
+group on POSIX systems. Since process identifiers are always integers,
+killing a non-numeric process is now fatal.
+.IP \(bu 4
+5.10.0 inadvertently disabled an optimisation, which caused a measurable
+performance drop in list assignment, such as is often used to assign
+function parameters from \f(CW@_\fR. The optimisation has been re-instated, and
+the performance regression fixed. (This fix is also present in 5.10.1)
+.IP \(bu 4
+Fixed memory leak on \f(CW\*(C`while (1) { map 1, 1 }\*(C'\fR [RT #53038].
+.IP \(bu 4
+Some potential coredumps in PerlIO fixed [RT #57322,54828].
+.IP \(bu 4
+The debugger now works with lvalue subroutines.
+.IP \(bu 4
+The debugger's \f(CW\*(C`m\*(C'\fR command was broken on modules that defined constants
+[RT #61222].
+.IP \(bu 4
+\&\f(CW\*(C`crypt\*(C'\fR and string complement could return tainted values for untainted
+arguments [RT #59998].
+.IP \(bu 4
+The \f(CW\*(C`\-i\*(C'\fR\fI.suffix\fR command-line switch now recreates the file using
+restricted permissions, before changing its mode to match the original
+file. This eliminates a potential race condition [RT #60904].
+.IP \(bu 4
+On some Unix systems, the value in \f(CW$?\fR would not have the top bit set
+(\f(CW\*(C`$? & 128\*(C'\fR) even if the child core dumped.
+.IP \(bu 4
+Under some circumstances, \f(CW$^R\fR could incorrectly become undefined
+[RT #57042].
+.IP \(bu 4
+In the XS API, various hash functions, when passed a pre-computed hash where
+the key is UTF\-8, might result in an incorrect lookup.
+.IP \(bu 4
+XS code including \fIXSUB.h\fR before \fIperl.h\fR gave a compile-time error
+[RT #57176].
+.IP \(bu 4
+\&\f(CW\*(C`$object\->isa(\*(AqFoo\*(Aq)\*(C'\fR would report false if the package \f(CW\*(C`Foo\*(C'\fR
+didn't exist, even if the object's \f(CW@ISA\fR contained \f(CW\*(C`Foo\*(C'\fR.
+.IP \(bu 4
+Various bugs in the new-to 5.10.0 mro code, triggered by manipulating
+\&\f(CW@ISA\fR, have been found and fixed.
+.IP \(bu 4
+Bitwise operations on references could crash the interpreter, e.g.
+\&\f(CW\*(C`$x=\e$y; $x |= "foo"\*(C'\fR [RT #54956].
+.IP \(bu 4
+Patterns including alternation might be sensitive to the internal UTF\-8
+representation, e.g.
+.Sp
+.Vb 3
+\& my $byte = chr(192);
+\& my $utf8 = chr(192); utf8::upgrade($utf8);
+\& $utf8 =~ /$byte|X}/i; # failed in 5.10.0
+.Ve
+.IP \(bu 4
+Within UTF8\-encoded Perl source files (i.e. where \f(CW\*(C`use utf8\*(C'\fR is in
+effect), double-quoted literal strings could be corrupted where a \f(CW\*(C`\exNN\*(C'\fR,
+\&\f(CW\*(C`\e0NNN\*(C'\fR or \f(CW\*(C`\eN{}\*(C'\fR is followed by a literal character with ordinal value
+greater than 255 [RT #59908].
+.IP \(bu 4
+\&\f(CW\*(C`B::Deparse\*(C'\fR failed to correctly deparse various constructs:
+\&\f(CW\*(C`readpipe STRING\*(C'\fR [RT #62428], \f(CWCORE::require(STRING)\fR [RT #62488],
+\&\f(CW\*(C`sub foo(_)\*(C'\fR [RT #62484].
+.IP \(bu 4
+Using \f(CW\*(C`setpgrp\*(C'\fR with no arguments could corrupt the perl stack.
+.IP \(bu 4
+The block form of \f(CW\*(C`eval\*(C'\fR is now specifically trappable by \f(CW\*(C`Safe\*(C'\fR and
+\&\f(CW\*(C`ops\*(C'\fR. Previously it was erroneously treated like string \f(CW\*(C`eval\*(C'\fR.
+.IP \(bu 4
+In 5.10.0, the two characters \f(CW\*(C`[~\*(C'\fR were sometimes parsed as the smart
+match operator (\f(CW\*(C`~~\*(C'\fR) [RT #63854].
+.IP \(bu 4
+In 5.10.0, the \f(CW\*(C`*\*(C'\fR quantifier in patterns was sometimes treated as
+\&\f(CW\*(C`{0,32767}\*(C'\fR [RT #60034, #60464]. For example, this match would fail:
+.Sp
+.Vb 1
+\& ("ab" x 32768) =~ /^(ab)*$/
+.Ve
+.IP \(bu 4
+\&\f(CW\*(C`shmget\*(C'\fR was limited to a 32 bit segment size on a 64 bit OS [RT #63924].
+.IP \(bu 4
+Using \f(CW\*(C`next\*(C'\fR or \f(CW\*(C`last\*(C'\fR to exit a \f(CW\*(C`given\*(C'\fR block no longer produces a
+spurious warning like the following:
+.Sp
+.Vb 1
+\& Exiting given via last at foo.pl line 123
+.Ve
+.IP \(bu 4
+Assigning a format to a glob could corrupt the format; e.g.:
+.Sp
+.Vb 1
+\& *bar=*foo{FORMAT}; # foo format now bad
+.Ve
+.IP \(bu 4
+Attempting to coerce a typeglob to a string or number could cause an
+assertion failure. The correct error message is now generated,
+\&\f(CW\*(C`Can\*(Aqt coerce GLOB to \fR\f(CI$type\fR\f(CW\*(C'\fR.
+.IP \(bu 4
+Under \f(CW\*(C`use filetest \*(Aqaccess\*(Aq\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR was using the wrong access
+mode. This has been fixed [RT #49003].
+.IP \(bu 4
+\&\f(CW\*(C`length\*(C'\fR on a tied scalar that returned a Unicode value would not be
+correct the first time. This has been fixed.
+.IP \(bu 4
+Using an array \f(CW\*(C`tie\*(C'\fR inside in array \f(CW\*(C`tie\*(C'\fR could SEGV. This has been
+fixed. [RT #51636]
+.IP \(bu 4
+A race condition inside \f(CWPerlIOStdio_close()\fR has been identified and
+fixed. This used to cause various threading issues, including SEGVs.
+.IP \(bu 4
+In \f(CW\*(C`unpack\*(C'\fR, the use of \f(CW\*(C`()\*(C'\fR groups in scalar context was internally
+placing a list on the interpreter's stack, which manifested in various
+ways, including SEGVs. This is now fixed [RT #50256].
+.IP \(bu 4
+Magic was called twice in \f(CW\*(C`substr\*(C'\fR, \f(CW\*(C`\e&$x\*(C'\fR, \f(CW\*(C`tie $x, $m\*(C'\fR and \f(CW\*(C`chop\*(C'\fR.
+These have all been fixed.
+.IP \(bu 4
+A 5.10.0 optimisation to clear the temporary stack within the implicit
+loop of \f(CW\*(C`s///ge\*(C'\fR has been reverted, as it turned out to be the cause of
+obscure bugs in seemingly unrelated parts of the interpreter [commit
+ef0d4e17921ee3de].
+.IP \(bu 4
+The line numbers for warnings inside \f(CW\*(C`elsif\*(C'\fR are now correct.
+.IP \(bu 4
+The \f(CW\*(C`..\*(C'\fR operator now works correctly with ranges whose ends are at or
+close to the values of the smallest and largest integers.
+.IP \(bu 4
+\&\f(CW\*(C`binmode STDIN, \*(Aq:raw\*(Aq\*(C'\fR could lead to segmentation faults on some platforms.
+This has been fixed [RT #54828].
+.IP \(bu 4
+An off-by-one error meant that \f(CW\*(C`index $str, ...\*(C'\fR was effectively being
+executed as \f(CW\*(C`index "$str\e0", ...\*(C'\fR. This has been fixed [RT #53746].
+.IP \(bu 4
+Various leaks associated with named captures in regexes have been fixed
+[RT #57024].
+.IP \(bu 4
+A weak reference to a hash would leak. This was affecting \f(CW\*(C`DBI\*(C'\fR
+[RT #56908].
+.IP \(bu 4
+Using (?|) in a regex could cause a segfault [RT #59734].
+.IP \(bu 4
+Use of a UTF\-8 \f(CW\*(C`tr//\*(C'\fR within a closure could cause a segfault [RT #61520].
+.IP \(bu 4
+Calling \f(CWPerl_sv_chop()\fR or otherwise upgrading an SV could result in an
+unaligned 64\-bit access on the SPARC architecture [RT #60574].
+.IP \(bu 4
+In the 5.10.0 release, \f(CW\*(C`inc_version_list\*(C'\fR would incorrectly list
+\&\f(CW\*(C`5.10.*\*(C'\fR after \f(CW\*(C`5.8.*\*(C'\fR; this affected the \f(CW@INC\fR search order
+[RT #67628].
+.IP \(bu 4
+In 5.10.0, \f(CW\*(C`pack "a*", $tainted_value\*(C'\fR returned a non-tainted value
+[RT #52552].
+.IP \(bu 4
+In 5.10.0, \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`sprintf\*(C'\fR could produce the fatal error
+\&\f(CW\*(C`panic: utf8_mg_pos_cache_update\*(C'\fR when printing UTF\-8 strings
+[RT #62666].
+.IP \(bu 4
+In the 5.10.0 release, a dynamically created \f(CW\*(C`AUTOLOAD\*(C'\fR method might be
+missed (method cache issue) [RT #60220,60232].
+.IP \(bu 4
+In the 5.10.0 release, a combination of \f(CW\*(C`use feature\*(C'\fR and \f(CW\*(C`//ee\*(C'\fR could
+cause a memory leak [RT #63110].
+.IP \(bu 4
+\&\f(CW\*(C`\-C\*(C'\fR on the shebang (\f(CW\*(C`#!\*(C'\fR) line is once more permitted if it is also
+specified on the command line. \f(CW\*(C`\-C\*(C'\fR on the shebang line used to be a
+silent no-op \fIif\fR it was not also on the command line, so perl 5.10.0
+disallowed it, which broke some scripts. Now perl checks whether it is
+also on the command line and only dies if it is not [RT #67880].
+.IP \(bu 4
+In 5.10.0, certain types of re-entrant regular expression could crash,
+or cause the following assertion failure [RT #60508]:
+.Sp
+.Vb 1
+\& Assertion rx\->sublen >= (s \- rx\->subbeg) + i failed
+.Ve
+.IP \(bu 4
+Perl now includes previously missing files from the Unicode Character
+Database.
+.IP \(bu 4
+Perl now honors \f(CW\*(C`TMPDIR\*(C'\fR when opening an anonymous temporary file.
+.SH "Platform Specific Changes"
+.IX Header "Platform Specific Changes"
+Perl is incredibly portable. In general, if a platform has a C compiler,
+someone has ported Perl to it (or will soon). We're happy to announce
+that Perl 5.12 includes support for several new platforms. At the same
+time, it's time to bid farewell to some (very) old friends.
+.SS "New Platforms"
+.IX Subsection "New Platforms"
+.IP Haiku 4
+.IX Item "Haiku"
+Perl's developers have merged patches from Haiku's maintainers. Perl
+should now build on Haiku.
+.IP "MirOS BSD" 4
+.IX Item "MirOS BSD"
+Perl should now build on MirOS BSD.
+.SS "Discontinued Platforms"
+.IX Subsection "Discontinued Platforms"
+.IP Domain/OS 4
+.IX Item "Domain/OS"
+.PD 0
+.IP MiNT 4
+.IX Item "MiNT"
+.IP "Tenon MachTen" 4
+.IX Item "Tenon MachTen"
+.PD
+.SS "Updated Platforms"
+.IX Subsection "Updated Platforms"
+.IP AIX 4
+.IX Item "AIX"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Removed \fIlibbsd\fR for AIX 5L and 6.1. Only \f(CWflock()\fR was used from
+\&\fIlibbsd\fR.
+.IP \(bu 4
+Removed \fIlibgdbm\fR for AIX 5L and 6.1 if \fIlibgdbm\fR < 1.8.3\-5 is
+installed. The \fIlibgdbm\fR is delivered as an optional package with the
+AIX Toolbox. Unfortunately the versions below 1.8.3\-5 are broken.
+.IP \(bu 4
+Hints changes mean that AIX 4.2 should work again.
+.RE
+.RS 4
+.RE
+.IP Cygwin 4
+.IX Item "Cygwin"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Perl now supports IPv6 on Cygwin 1.7 and newer.
+.IP \(bu 4
+On Cygwin we now strip the last number from the DLL. This has been the
+behaviour in the cygwin.com build for years. The hints files have been
+updated.
+.RE
+.RS 4
+.RE
+.IP "Darwin (Mac OS X)" 4
+.IX Item "Darwin (Mac OS X)"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Skip testing the be_BY.CP1131 locale on Darwin 10 (Mac OS X 10.6),
+as it's still buggy.
+.IP \(bu 4
+Correct infelicities in the regexp used to identify buggy locales
+on Darwin 8 and 9 (Mac OS X 10.4 and 10.5, respectively).
+.RE
+.RS 4
+.RE
+.IP "DragonFly BSD" 4
+.IX Item "DragonFly BSD"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Fix thread library selection [perl #69686]
+.RE
+.RS 4
+.RE
+.IP FreeBSD 4
+.IX Item "FreeBSD"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+The hints files now identify the correct threading libraries on FreeBSD 7
+and later.
+.RE
+.RS 4
+.RE
+.IP Irix 4
+.IX Item "Irix"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+We now work around a bizarre preprocessor bug in the Irix 6.5 compiler:
+\&\f(CW\*(C`cc \-E \-\*(C'\fR unfortunately goes into K&R mode, but \f(CW\*(C`cc \-E file.c\*(C'\fR doesn't.
+.RE
+.RS 4
+.RE
+.IP NetBSD 4
+.IX Item "NetBSD"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Hints now supports versions 5.*.
+.RE
+.RS 4
+.RE
+.IP OpenVMS 4
+.IX Item "OpenVMS"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+\&\f(CW\*(C`\-UDEBUGGING\*(C'\fR is now the default on VMS.
+.Sp
+Like it has been everywhere else for ages and ages. Also make command-line
+selection of \-UDEBUGGING and \-DDEBUGGING work in configure.com; before
+the only way to turn it off was by saying no in answer to the interactive
+question.
+.IP \(bu 4
+The default pipe buffer size on VMS has been updated to 8192 on 64\-bit
+systems.
+.IP \(bu 4
+Reads from the in-memory temporary files of \f(CW\*(C`PerlIO::scalar\*(C'\fR used to fail
+if \f(CW$/\fR was set to a numeric reference (to indicate record-style reads).
+This is now fixed.
+.IP \(bu 4
+VMS now supports \f(CW\*(C`getgrgid\*(C'\fR.
+.IP \(bu 4
+Many improvements and cleanups have been made to the VMS file name handling
+and conversion code.
+.IP \(bu 4
+Enabling the \f(CW\*(C`PERL_VMS_POSIX_EXIT\*(C'\fR logical name now encodes a POSIX exit
+status in a VMS condition value for better interaction with GNV's bash
+shell and other utilities that depend on POSIX exit values. See
+"$?" in perlvms for details.
+.IP \(bu 4
+\&\f(CW\*(C`File::Copy\*(C'\fR now detects Unix compatibility mode on VMS.
+.RE
+.RS 4
+.RE
+.IP "Stratus VOS" 4
+.IX Item "Stratus VOS"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Various changes from Stratus have been merged in.
+.RE
+.RS 4
+.RE
+.IP Symbian 4
+.IX Item "Symbian"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+There is now support for Symbian S60 3.2 SDK and S60 5.0 SDK.
+.RE
+.RS 4
+.RE
+.IP Windows 4
+.IX Item "Windows"
+.RS 4
+.PD 0
+.IP \(bu 4
+.PD
+Perl 5.12 supports Windows 2000 and later. The supporting code for
+legacy versions of Windows is still included, but will be removed
+during the next development cycle.
+.IP \(bu 4
+Initial support for building Perl with MinGW\-w64 is now available.
+.IP \(bu 4
+\&\fIperl.exe\fR now includes a manifest resource to specify the \f(CW\*(C`trustInfo\*(C'\fR
+settings for Windows Vista and later. Without this setting Windows
+would treat \fIperl.exe\fR as a legacy application and apply various
+heuristics like redirecting access to protected file system areas
+(like the "Program Files" folder) to the users "VirtualStore"
+instead of generating a proper "permission denied" error.
+.Sp
+The manifest resource also requests the Microsoft Common-Controls
+version 6.0 (themed controls introduced in Windows XP). Check out the
+Win32::VisualStyles module on CPAN to switch back to old style
+unthemed controls for legacy applications.
+.IP \(bu 4
+The \f(CW\*(C`\-t\*(C'\fR filetest operator now only returns true if the filehandle
+is connected to a console window. In previous versions of Perl it
+would return true for all character mode devices, including \fINUL\fR
+and \fILPT1\fR.
+.IP \(bu 4
+The \f(CW\*(C`\-p\*(C'\fR filetest operator now works correctly, and the
+Fcntl::S_IFIFO constant is defined when Perl is compiled with
+Microsoft Visual C. In previous Perl versions \f(CW\*(C`\-p\*(C'\fR always
+returned a false value, and the Fcntl::S_IFIFO constant
+was not defined.
+.Sp
+This bug is specific to Microsoft Visual C and never affected
+Perl binaries built with MinGW.
+.IP \(bu 4
+The socket error codes are now more widely supported: The POSIX
+module will define the symbolic names, like POSIX::EWOULDBLOCK,
+and stringification of socket error codes in $! works as well
+now;
+.Sp
+.Vb 2
+\& C:\e>perl \-MPOSIX \-E "$!=POSIX::EWOULDBLOCK; say $!"
+\& A non\-blocking socket operation could not be completed immediately.
+.Ve
+.IP \(bu 4
+\&\fBflock()\fR will now set sensible error codes in $!. Previous Perl versions
+copied the value of $^E into $!, which caused much confusion.
+.IP \(bu 4
+\&\fBselect()\fR now supports all empty \f(CW\*(C`fd_set\*(C'\fRs more correctly.
+.IP \(bu 4
+\&\f(CW\*(Aq.\efoo\*(Aq\fR and \f(CW\*(Aq..\efoo\*(Aq\fR were treated differently than
+\&\f(CW\*(Aq./foo\*(Aq\fR and \f(CW\*(Aq../foo\*(Aq\fR by \f(CW\*(C`do\*(C'\fR and \f(CW\*(C`require\*(C'\fR [RT #63492].
+.IP \(bu 4
+Improved message window handling means that \f(CW\*(C`alarm\*(C'\fR and \f(CW\*(C`kill\*(C'\fR messages
+will no longer be dropped under race conditions.
+.IP \(bu 4
+Various bits of Perl's build infrastructure are no longer converted to
+win32 line endings at release time. If this hurts you, please report the
+problem with the perlbug program included with perl.
+.RE
+.RS 4
+.RE
+.SH "Known Problems"
+.IX Header "Known Problems"
+This is a list of some significant unfixed bugs, which are regressions
+from either 5.10.x or 5.8.x.
+.IP \(bu 4
+Some CPANPLUS tests may fail if there is a functioning file
+\&\fI../../cpanp\-run\-perl\fR outside your build directory. The failure
+shouldn't imply there's a problem with the actual functional
+software. The bug is already fixed in [RT #74188] and is scheduled for
+inclusion in perl\-v5.12.1.
+.IP \(bu 4
+\&\f(CW\*(C`List::Util::first\*(C'\fR misbehaves in the presence of a lexical \f(CW$_\fR
+(typically introduced by \f(CW\*(C`my $_\*(C'\fR or implicitly by \f(CW\*(C`given\*(C'\fR). The variable
+which gets set for each iteration is the package variable \f(CW$_\fR, not the
+lexical \f(CW$_\fR [RT #67694].
+.Sp
+A similar issue may occur in other modules that provide functions which
+take a block as their first argument, like
+.Sp
+.Vb 1
+\& foo { ... $_ ...} list
+.Ve
+.IP \(bu 4
+Some regexes may run much more slowly when run in a child thread compared
+with the thread the pattern was compiled into [RT #55600].
+.IP \(bu 4
+Things like \f(CW\*(C`"\eN{LATIN SMALL LIGATURE FF}" =~ /\eN{LATIN SMALL LETTER F}+/\*(C'\fR
+will appear to hang as they get into a very long running loop [RT #72998].
+.IP \(bu 4
+Several porters have reported mysterious crashes when Perl's entire
+test suite is run after a build on certain Windows 2000 systems. When
+run by hand, the individual tests reportedly work fine.
+.SH Errata
+.IX Header "Errata"
+.IP \(bu 4
+This one is actually a change introduced in 5.10.0, but it was missed
+from that release's perldelta, so it is mentioned here instead.
+.Sp
+A bugfix related to the handling of the \f(CW\*(C`/m\*(C'\fR modifier and \f(CW\*(C`qr\*(C'\fR resulted
+in a change of behaviour between 5.8.x and 5.10.0:
+.Sp
+.Vb 2
+\& # matches in 5.8.x, doesn\*(Aqt match in 5.10.0
+\& $re = qr/^bar/; "foo\enbar" =~ /$re/m;
+.Ve
+.SH Acknowledgements
+.IX Header "Acknowledgements"
+Perl 5.12.0 represents approximately two years of development since
+Perl 5.10.0 and contains over 750,000 lines of changes across over
+3,000 files from over 200 authors and committers.
+.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.12.0:
+.PP
+Aaron Crane, Abe Timmerman, Abhijit Menon-Sen, Abigail, Adam Russell,
+Adriano Ferreira, Ævar Arnfjörð Bjarmason, Alan Grover, Alexandr
+Ciornii, Alex Davies, Alex Vandiver, Andreas Koenig, Andrew Rodland,
+andrew@sundale.net, Andy Armstrong, Andy Dougherty, Jose AUGUSTE-ETIENNE,
+Benjamin Smith, Ben Morrow, bharanee rathna, Bo Borgerson, Bo Lindbergh,
+Brad Gilbert, Bram, Brendan O'Dea, brian d foy, Charles Bailey,
+Chip Salzenberg, Chris 'BinGOs' Williams, Christoph Lamprecht, Chris
+Williams, chromatic, Claes Jakobsson, Craig A. Berry, Dan Dascalescu,
+Daniel Frederick Crisman, Daniel M. Quinlan, Dan Jacobson, Dan Kogai,
+Dave Mitchell, Dave Rolsky, David Cantrell, David Dick, David Golden,
+David Mitchell, David M. Syzdek, David Nicol, David Wheeler, Dennis
+Kaarsemaker, Dintelmann, Peter, Dominic Dunlop, Dr.Ruud, Duke Leto,
+Enrico Sorcinelli, Eric Brine, Father Chrysostomos, Florian Ragwitz,
+Frank Wiegand, Gabor Szabo, Gene Sullivan, Geoffrey T. Dairiki, George
+Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Graham Barr, Green, Paul,
+Hans Dieter Pearcey, Harmen, H. Merijn Brand, Hugo van der Sanden,
+Ian Goodacre, Igor Sutton, Ingo Weinhold, James Bence, James Mastros,
+Jan Dubois, Jari Aalto, Jarkko Hietaniemi, Jay Hannah, Jerry Hedden,
+Jesse Vincent, Jim Cromie, Jody Belka, John E. Malmberg, John Malmberg,
+John Peacock, John Peacock via RT, John P. Linderman, John Wright,
+Josh ben Jore, Jos I. Boumans, Karl Williamson, Kenichi Ishigaki, Ken
+Williams, Kevin Brintnall, Kevin Ryde, Kurt Starsinic, Leon Brocard,
+Lubomir Rintel, Luke Ross, Marcel Grünauer, Marcus Holland-Moritz, Mark
+Jason Dominus, Marko Asplund, Martin Hasch, Mashrab Kuvatov, Matt Kraai,
+Matt S Trout, Max Maischein, Michael Breen, Michael Cartmell, Michael
+G Schwern, Michael Witten, Mike Giroux, Milosz Tanski, Moritz Lenz,
+Nicholas Clark, Nick Cleaton, Niko Tyni, Offer Kaye, Osvaldo Villalon,
+Paul Fenwick, Paul Gaborit, Paul Green, Paul Johnson, Paul Marquess,
+Philip Hazel, Philippe Bruhat, Rafael Garcia-Suarez, Rainer Tammer,
+Rajesh Mandalemula, Reini Urban, Renée Bäcker, Ricardo Signes,
+Ricardo SIGNES, Richard Foley, Rich Rauenzahn, Rick Delaney, Risto
+Kankkunen, Robert May, Roberto C. Sanchez, Robin Barker, SADAHIRO
+Tomoyuki, Salvador Ortiz Garcia, Sam Vilain, Scott Lanning, Sébastien
+Aperghis-Tramoni, Sérgio Durigan Júnior, Shlomi Fish, Simon 'corecode'
+Schubert, Sisyphus, Slaven Rezic, Smylers, Steffen Müller, Steffen
+Ullrich, Stepan Kasal, Steve Hay, Steven Schubiger, Steve Peters, Tels,
+The Doctor, Tim Bunce, Tim Jenness, Todd Rinaldo, Tom Christiansen,
+Tom Hukins, Tom Wyant, Tony Cook, Torsten Schoenfeld, Tye McQueen,
+Vadim Konovalov, Vincent Pit, Hio YAMASHINA, Yasuhiro Matsumoto,
+Yitzchak Scott-Thoennes, Yuval Kogman, Yves Orton, Zefram, Zsban Ambrus
+.PP
+This is woefully incomplete as it's automatically generated from version
+control history. In particular, it doesn't include the names of the
+(very much appreciated) contributors who reported issues in previous
+versions of Perl that helped make Perl 5.12.0 better. For a more complete
+list of all of Perl's historical contributors, please see the \f(CW\*(C`AUTHORS\*(C'\fR
+file in the Perl 5.12.0 distribution.
+.PP
+Our "retired" pumpkings Nicholas Clark and Rafael Garcia-Suarez
+deserve special thanks for their brilliant and substantive ongoing
+contributions. Nicholas personally authored over 30% of the patches
+since 5.10.0. Rafael comes in second in patch authorship with 11%,
+but is first by a long shot in committing patches authored by others,
+pushing 44% of the commits since 5.10.0 in this category, often after
+providing considerable coaching to the patch authors. These statistics
+in no way comprise all of their contributions, but express in shorthand
+that we couldn't have done it without them.
+.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.
+.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 \fBperlbug\fR
+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
+analyzed 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 the core committers, who will be able
+to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently
+distributed on CPAN.
+.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.
+.PP
+<http://dev.perl.org/perl5/errata.html> for a list of issues
+found after this release, as well as a list of CPAN modules known
+to be incompatible with this release.