This document describes differences between the 5.12.0 release and
the 5.14.0 release.
+If you are upgrading from an earlier release such as 5.10.0, first read
+L<perl5120delta>, which describes differences between 5.10.0 and
+5.12.0.
+
Some of the bug fixes in this release have been backported to subsequent
releases of 5.12.x. Those are indicated with the 5.12.x version in
parentheses.
-XXX Go through the perl512*delta files and do that.
-
=head1 Notice
XXX Any important notices here
with one exception noted below.
See L<http://unicode.org/versions/Unicode6.0.0> for details on the new
release. Perl does not support any Unicode provisional properties,
-including the new ones for this release, but their database files are
-packaged with Perl.
+including the new ones for this release.
Unicode 6.0 has chosen to use the name C<BELL> for the character at U+1F514,
which is a symbol that looks like a bell, and is used in Japanese cell
See L<charnames> for details on all these changes.
+=head3 New warnings categories for problematic (non-)Unicode code points.
+
+Three new warnings subcategories of "utf8" have been added. These
+allow you to turn off some "utf8" warnings, while allowing
+others warnings to remain on. The three categories are:
+C<surrogate> when UTF-16 surrogates are encountered;
+C<nonchar> when Unicode non-character code points are encountered;
+and C<non_unicode> when code points that are above the legal Unicode
+maximum of 0x10FFFF are encountered.
+
=head3 Any unsigned value can be encoded as a character
With this release, Perl is adopting a model that any unsigned value can
be treated as a code point and encoded internally (as utf8) without
warnings - not just the code points that are legal in Unicode.
-However, unless utf8 warnings have been
+However, unless utf8 or the corresponding sub-category (see previous
+item) warnings have been
explicitly lexically turned off, outputting or performing a
Unicode-defined operation (such as upper-casing) on such a code point
will generate a warning. Attempting to input these using strict rules
them will work the same as for the non-legal Unicode code points, as the
Unicode standard says they are illegal for "open interchange".
-=head3 New warnings categories for problematic (non-)Unicode code points.
+=head3 Unicode database files not installed
-Three new warnings subcategories of "utf8" have been added. These
-allow you to turn off some "utf8" warnings, while allowing
-others warnings to remain on. The three categories are:
-C<surrogate> when UTF-16 surrogates are encountered;
-C<nonchar> when Unicode non-character code points are encountered;
-and C<non_unicode> when code points that are above the legal Unicode
-maximum of 0x10FFFF are encountered.
+The Unicode database files are no longer installed with Perl. This
+doesn't affect any functionality in Perl and saves significant disk
+space. If you previously were explicitly opening and reading those
+files, you can download them from
+L<http://www.unicode.org/Public/zipped/6.0.0/>.
=head2 Regular Expressions
of compiling the regular expression.
The C</a> regular expression modifier restricts C<\s>, C<\d> and C<\w> and
-the Posix (C<[[:posix:]]>) character classes to the ASCII range. The
+the Posix (C<[[:posix:]]>) character classes to the ASCII range. Their
complements and C<\b> and C<\B> are correspondingly
affected. Otherwise, C</a> behaves like the C</u> modifier, in that
case-insensitive matching uses Unicode semantics.
=head2 Regular Expressions and String Escapes
-=head3 C<\cI<X>>
-
-The backslash-c construct was designed as a way of specifying
-non-printable characters, but there were no restrictions (on ASCII
-platforms) on what the character following the C<c> could be. Now, that
-character must be one of the ASCII characters.
-
=head3 \400-\777
Use of C<\400>-C<\777> in regexes in certain circumstances has given
m/\p{ASCII_Hex_Digit}+/i
could previously match non-ASCII characters because of the Unicode
-matching rules. There were a number of bugs in this feature until an
-earlier release in the 5.13 series. Now this release reverts, and
-removes the feature completely except for the few properties where
-people have come to expect it, namely the ones where casing is an
-integral part of their functionality, such as C<m/\p{Uppercase}/i> and
-C<m/\p{Lowercase}/i>, both of which match the exact same code points,
-namely those matched by C<m/\p{Cased}/i>. Details are in
-L<perlrecharclass/Unicode Properties>.
-
-XXX The mention of ‘until an earlier release in the 5.13 series’ needs to
-change, but I do not fully understand what happened here.
+matching rules (although there were a number of bugs with this). Now
+matching under C</i> gives the same results as non-C</i> matching except
+for those few properties where people have come to expect differences,
+namely the ones where casing is an integral part of their meaning, such
+as C<m/\p{Uppercase}/i> and C<m/\p{Lowercase}/i>, both of which match
+the exact same code points, namely those matched by C<m/\p{Cased}/i>.
+Details are in L<perlrecharclass/Unicode Properties>.
User-defined property handlers that need to match differently under
-C</i> must change to read the new boolean parameter passed to it which is
+C</i> must change to read the new boolean parameter passed to them which is
non-zero if case-insensitive matching is in effect or 0 otherwise. See
L<perluniprops/User-Defined Character Properties>.
Now, a Unicode property match specified in the pattern will indicate
that the pattern is meant for matching according to Unicode rules, the way
-C<\x{}> does.
+C<\N{}> does.
=head3 Regular expressions retain their localeness when interpolated
example, C<< m/foo/sand $bar >> will still be parsed
as C<< m/foo/s and $bar >> but will issue a warning.
+=head2 C<\cI<X>>
+
+The backslash-c construct was designed as a way of specifying
+non-printable characters, but there were no restrictions (on ASCII
+platforms) on what the character following the C<c> could be. Now,
+a deprecation warning is raised if that character isn't an ASCII character.
+Also, a deprecation warning is raised for C<"\c{"> (which is the same
+as simply saying C<";">).
+
+=head2 C<"\b{"> and C<"\B{">
+
+In regular expressions, a literal C<"{"> immediately following a C<"\b">
+(not in a bracketed character class) or a C<"\B{"> is now deprecated
+to allow for its future use by Perl itself.
+
=head2 Deprecation warning added for deprecated-in-core .pl libs
This is a mandatory warning, not obeying -X or lexical warning bits.
This feature is being deprecated due to its many issues, as documented in
L<perlunicode/User-Defined Case Mappings (for serious hackers only)>.
-It is planned to remove this feature in Perl 5.16. A CPAN module
-providing improved functionality is being prepared for release by the
-time 5.14 is.
-
-XXX What module is that?
+It is planned to remove this feature in Perl 5.16. Instead use the CPAN module
+L<Unicode::Casing>, which provides improved functionality.
=head2 Deprecated modules
=item *
-C<Module::Metadata> 1.000003 has been added as a dual-life module. It gathers
+C<Module::Metadata> 1.000004 has been added as a dual-life module. It gathers
package and POD information from Perl module files. It is a standalone module
based on Module::Build::ModuleInfo for use by other module installation
toolchain components. Module::Build::ModuleInfo has been deprecated in
=back
-=head2 Selected Module and Pragma Updates
+=head2 Updated Modules and Pragma
=over 4
=item *
-C<ptar> has a new option to allow safe
+The C<ptar> utility has a new option to allow safe
creation of tarballs without world-writable files on Windows, allowing those
archives to be uploaded to CPAN.
=item *
-C<B> has been upgraded from version 1.23 to 1.27.
+C<autodie> has been upgraded from version 2.06_01 to 2.1001.
+
+=item *
+
+C<AutoLoader> has been upgraded from version 5.70 to 5.71.
+
+=item *
+
+C<B> has been upgraded from version 1.23 to 1.29.
It no longer crashes when taking apart a C<y///> containing characters
outside the octet range or compiled in a C<use utf8> scope.
=item *
-C<B::Concise> has been upgraded from version 0.78 to 0.82.
+C<B::Concise> has been upgraded from version 0.78 to 0.83.
B::Concise marks rv2sv, rv2av and rv2hv ops with the new OPpDEREF flag
as "DREFed".
=item *
-C<B::Deparse> has been upgraded from version 0.96 to 1.02.
+C<B::Debug> has been upgraded from version 1.12 to 1.16.
+
+=item *
+
+C<B::Deparse> has been upgraded from version 0.96 to 1.03.
The deparsing of a nextstate op has changed when it has both a
change of package (relative to the previous nextstate), or a change of
=item *
-C<Carp> has been upgraded from version 1.15 to 1.19.
+C<B::Lint> has been upgraded from version 1.11_01 to 1.13.
+
+=item *
+
+C<base> has been upgraded from version 2.15 to 2.16.
+
+=item *
+
+C<bignum> has been upgraded from version 0.23 to 0.26.
+
+=item *
+
+C<Carp> has been upgraded from version 1.15 to 1.20.
L<Carp> now detects incomplete L<caller()|perlfunc/"caller EXPR"> overrides and
avoids using bogus C<@DB::args>. To provide backtraces,
=item *
-C<CGI> has been upgraded from version 3.48 to 3.51.
+C<CGI> has been upgraded from version 3.48 to 3.52.
This provides the following security fixes: the MIME boundary in
multipart_init is now random and the handling of
=item *
-C<CPAN> has been upgraded from version 1.94_56 to 1.9600.-
+C<Compress::Raw::Zlib> has been upgraded from version 2.024 to 2.033.
+
+=item *
+
+C<CPAN> has been upgraded from version 1.94_56 to 1.9600.
Major highlights:
=item *
+C<CPANPLUS::Dist::Build> has been upgraded from version 0.46 to 0.54.
+
+=item *
+
C<Data::Dumper> has been upgraded from version 2.125 to 2.130_02.
The indentation used to be off when C<$Data::Dumper::Terse> was set. This
=item *
+C<DB_File> has been upgraded from version 1.820 to 1.821.
+
+=item *
+
C<Devel::DProf> has been upgraded from version 20080331.00 to 20110228.00.
Merely loading C<Devel::DProf> now no longer triggers profiling to start.
=item *
+C<Devel::SelfStubber> has been upgraded from version 1.03 to 1.05.
+
+=item *
+
C<diagnostics> has been upgraded from version 1.19 to 1.22.
It now renders pod links slightly better, and has been taught to find
=item *
-C<DynaLoader> has been upgraded from version 1.10 to 1.12.
+C<Dumpvalue> has been upgraded from version 1.13 to 1.16.
+
+=item *
+
+C<DynaLoader> has been upgraded from version 1.10 to 1.13.
It fixes a buffer overflow when passed a very long file name.
=item *
+C<Env> has been upgraded from version 1.01 to 1.02.
+
+=item *
+
C<Errno> has been upgraded from version 1.11 to 1.13.
The implementation of C<Errno> has been refactored to use about 55% less memory.
=item *
+C<ExtUtils::CBuilder> has been upgraded from version 0.27 to 0.280202.
+
+=item *
+
+C<ExtUtils::Command> has been upgraded from version 1.16 to 1.17.
+
+=item *
+
C<ExtUtils::Constant> has been upgraded from 0.22 to 0.23.
The C<AUTOLOAD> helper code generated by C<ExtUtils::Constant::ProxySubs>
=item *
-C<File::DosGlob> has been upgraded from version 1.01 to 1.03.
+C<ExtUtils::Install> has been upgraded from version 1.55 to 1.56.
+
+=item *
+
+C<ExtUtils::MakeMaker> has been upgraded from version 6.56 to 6.57_05.
+
+=item *
+
+C<ExtUtils::Manifest> has been upgraded from version 1.57 to 1.58.
+
+=item *
+
+C<ExtUtils::ParseXS> has been upgraded from version 2.21 to 2.2209.
+
+=item *
+
+C<File::CheckTree> has been upgraded from version 4.4 to 4.41.
+
+=item *
+
+C<File::DosGlob> has been upgraded from version 1.01 to 1.04.
It allows patterns containing literal parentheses (they no longer need to
be escaped). On Windows, it no longer
=item *
-C<File::Find> has been upgraded from version 1.15 to 1.18.
+C<File::Find> has been upgraded from version 1.15 to 1.19.
It improves handling of backslashes on Windows, so that paths like
F<c:\dir\/file> are no longer generated [perl #71710].
=item *
-C<File::stat> has been upgraded from 1.02 to 1.04.
+C<File::stat> has been upgraded from 1.02 to 1.05.
The C<-x> and C<-X> file test operators now work correctly under the root
user.
=item *
-C<GDBM_File> has been upgraded from 1.10 to 1.13.
+C<Filter::Simple> has been upgraded from version 0.84 to 0.86.
+
+=item *
+
+C<GDBM_File> has been upgraded from 1.10 to 1.14.
This fixes a memory leak when DBM filters are used.
=item *
-C<Hash::Util> has been upgraded from 0.07 to 0.10.
+C<Hash::Util> has been upgraded from 0.07 to 0.11.
Hash::Util no longer emits spurious "uninitialized" warnings when
recursively locking hashes that have undefined values [perl #74280].
=item *
-C<I18N::Langinfo> has been upgraded from version 0.03 to 0.07.
+C<I18N::Collate> has been upgraded from version 1.01 to 1.02.
+
+=item *
+
+C<I18N::Langinfo> has been upgraded from version 0.03 to 0.08.
C<langinfo()> now defaults to using C<$_> if there is no argument given, just
as the documentation has always claimed.
=item *
-C<IO::Select> has been upgraded from version 1.17 to 1.18.
+C<I18N::LangTags> has been upgraded from version 0.35 to 0.35_01.
+
+=item *
+
+C<if> has been upgraded from version 0.05 to 0.0601.
+
+=item *
+
+C<IO> has been upgraded from version 1.25_02 to 1.25_04.
+
+=item *
+
+C<IO::Select> has been upgraded from version 1.17 to 1.20.
It now allows IO::Handle objects (and objects in derived classes) to be
removed from an IO::Select set even if the underlying file descriptor is
=item *
-C<IPC::Cmd> has been upgraded from version 0.54 to 0.68.
+C<IPC::Cmd> has been upgraded from version 0.54 to 0.70.
Resolves an issue with splitting Win32 command lines. An argument
consisting of the single character "0" used to be omitted (CPAN RT #62961).
=item *
-C<IPC::Open3> has been upgraded from 1.05 to 1.08.
+C<IPC::Open3> has been upgraded from 1.05 to 1.09.
C<open3> now produces an error if the C<exec> call fails, allowing this
condition to be distinguished from a child process that exited with a
=item *
-C<Locale::Maketext> has been upgraded from version 1.14 to 1.17.
+C<IPC::SysV> has been upgraded from version 2.01 to 2.03.
+
+=item *
+
+C<lib> has been upgraded from version 0.62 to 0.63.
+
+=item *
+
+C<Locale::Maketext> has been upgraded from version 1.14 to 1.19.
Locale::Maketext now supports external caches.
=item *
+C<Log::Message> has been upgraded from version 0.02 to 0.04.
+
+=item *
+
+C<Log::Message::Simple> has been upgraded from version 0.06 to 0.08.
+
+=item *
+
C<Math::BigInt> has been upgraded from version 1.89_01 to 1.994.
This fixes, among other things, incorrect results when computing binomial
=item *
+C<Math::BigInt::FastCalc> has been upgraded from version 0.19 to 0.28.
+
+=item *
+
+C<Math::BigRat> has been upgraded from version 0.24 to 0.26_02.
+
+=item *
+
+C<Memoize> has been upgraded from version 1.01_03 to 1.02.
+
+=item *
+
C<MIME::Base64> has been upgraded from 3.08 to 3.13.
Includes new functions to calculate the length of encoded and decoded
=item *
-C<Module::CoreList> has been upgraded from version 2.29 to XXX.
+C<Module::CoreList> has been upgraded from version 2.29 to 2.47.
Besides listing the updated core modules of this release, it also stops listing
the C<Filespec> module. That module never existed in core. The scripts
=item *
-C<NDBM_File> and C<ODBM_File> have been upgraded from 1.08 to 1.11, and
-from 1.08 to 1.09, respectively.
+C<Module::Load> has been upgraded from version 0.16 to 0.18.
+
+=item *
+
+C<Module::Load::Conditional> has been upgraded from version 0.34 to 0.44.
+
+=item *
+
+C<NDBM_File> has been upgraded from version 1.08 to 1.11.
This fixes a memory leak when DBM filters are used.
=item *
-C<overload> has been upgraded from 1.11 to 1.12.
+C<Net::Ping> has been upgraded from version 2.36 to 2.38.
+
+=item *
+
+C<NEXT> has been upgraded from version 0.64 to 0.65.
+
+=item *
+
+C<Object::Accessor> has been upgraded from version 0.36 to 0.38.
+
+=item *
+
+C<ODBM_File> have been upgraded from version 1.07 to 1.10.
+
+This fixes a memory leak when DBM filters are used.
+
+=item *
+
+C<overload> has been upgraded from 1.10 to 1.12.
C<overload::Method> can now handle subroutines that are themselves blessed
into overloaded classes [perl #71998].
=item *
+C<Params::Check> has been upgraded from version 0.26 to 0.28.
+
+=item *
+
+C<parent> has been upgraded from version 0.223 to 0.225.
+
+=item *
+
C<Parse::CPAN::Meta> has been upgraded from version 1.40 to 1.4401.
The latest Parse::CPAN::Meta can now read YAML and JSON files using
=item *
-C<POSIX> has been upgraded from 1.19 to 1.23.
+C<Pod::LaTeX> has been upgraded from version 0.58 to 0.59.
+
+=item *
+
+C<Pod::Perldoc> has been upgraded from version 3.15_02 to 3.15_03.
+
+=item *
+
+C<Pod::Simple> has been upgraded from version 3.13 to 3.16.
+
+=item *
+
+C<POSIX> has been upgraded from 1.19 to 1.24.
It now includes constants for POSIX signal constants.
=item *
+C<Term::ANSIColor> has been upgraded from version 2.02 to 3.00.
+
+=item *
+
+C<Term::UI> has been upgraded from version 0.20 to 0.26.
+
+=item *
+
+C<Test::Harness> has been upgraded from version 3.17 to 3.23.
+
+=item *
+
C<Test::Simple> has been upgraded from version 0.94 to 0.98.
Among many other things, subtests without a C<plan> or C<no_plan> now have an
=item *
+C<Thread::Queue> has been upgraded from version 2.11 to 2.12.
+
+=item *
+
+C<threads> has been upgraded from version 1.75 to 1.83.
+
+=item *
+
+C<threads::shared> has been upgraded from version 1.32 to 1.36.
+
+=item *
+
C<Tie::Hash> has been upgraded from version 1.03 to 1.04.
Calling C<< Tie::Hash-E<gt>TIEHASH() >> used to loop forever. Now it C<croak>s.
=item *
+C<Tie::RefHash> has been upgraded from version 1.38 to 1.39.
+
+=item *
+
+C<Time::HiRes> has been upgraded from version 1.9719 to 1.9721_01.
+
+=item *
+
+C<Time::Local> has been upgraded from version 1.1901_01 to 1.2000.
+
+=item *
+
+C<Time::Piece> has been upgraded from version 1.15_01 to 1.20_01.
+
+=item *
+
C<Unicode::Collate> has been upgraded from version 0.52_01 to 0.73.
Unicode::Collate has been updated to use Unicode 6.0.0.
=item *
+C<Unicode::Normalize> has been upgraded from version 1.03 to 1.10.
+
+=item *
+
C<Unicode::UCD> has been upgraded from version 0.27 to 0.32.
A new function, C<Unicode::UCD::num()>, has been added. This function
=item *
-C<warnings> and C<warnings::register> have been upgraded from version 1.09
-to 1.11 and from version 1.01 to 1.02 respectively.
+C<warnings> has been upgraded from version 1.09 to 1.12.
Calling C<use warnings> without arguments is now significantly more efficient.
+=item *
+
+C<warnings::register> have been upgraded from version 1.01 to 1.02.
+
It is now possible to register warning categories other than the names of
packages using C<warnings::register>. See L<perllexwarn> for more information.
=item *
+C<XSLoader> has been upgraded from version 0.10 to 0.13.
+
+=item *
+
C<VMS::DCLsym> has been upgraded from version 1.03 to 1.05.
Two bugs have been fixed [perl #84086]:
=over
-=item C<Class::ISA>
+=item *
+
+C<Class::ISA> has been removed from the Perl core. Prior version was 0.36.
+
+=item *
+
+C<Pod::Plainer> has been removed from the Perl core. Prior version was 1.02.
-=item C<Pod::Plainer>
+=item *
-=item C<Switch>
+C<Switch> has been removed from the Perl core. Prior version was 2.16.
=back
in some situations. Hence, the default actions for these functions has
been complemented to allow these code points. The new flags are
documented in L<perlapi>. Code that requires the problematic code
-points to be rejected needs to change to use these flags. Some flag
+points to be rejected needs to change to use the new flags. Some flag
names are retained for backward source compatibility, though they do
nothing, as they are now the default. However the flags
C<UNICODE_ALLOW_FDD0>, C<UNICODE_ALLOW_FFFF>, C<UNICODE_ILLEGAL>, and
L<perlunicode/Non-character code points>. See also L</Selected Bug Fixes>.
XXX Which bugs in particular? Selected Bug Fixes is too long for this link
-to be meaningful right now.
+to be meaningful right now
+I don't see the bugs in that section currently -- khw
=head2 Deprecated C APIs
=item *
Lvalue subroutines are again able to return copy-on-write scalars. This
-had been broken since version 5.10.0 [perl #75656] (5.12.2).
+had been broken since version 5.10.0 [perl #75656] (5.12.3).
=item *
XXX Many of these have probably already been solved. There are also
unresolved BBC articles linked to #77718 that are awaiting CPAN
releases. These may need to be listed here.
+See also #84444. Enbugger may also need to be listed if there is no new
+release in time (see #82152).
+JJORE/overload-eval-0.08.tar.gz appears to be broken, too. See
+http://www.nntp.perl.org/group/perl.perl5.porters/2010/11/msg165773.html
=over 4
=item *
-Bug fixes involving CvGV reference counting break Sub::Name. A
-patch has been sent upstream to the maintainer
-
-=item *
-
readline() returns an empty string instead of undef when it is
interrupted by a signal