C<BELL> mean the ASCII C<BEL> character, U+0007. In Perl 5.14,
C<\N{BELL}> will continue to mean U+0007, but its use will generate a
deprecated warning message, unless such warnings are turned off. The
-new name for U+0007 in Perl will be C<ALERT>, which corresponds nicely
-with the existing shorthand sequence for it, C<"\a">. C<\N{BEL}> will
-mean U+0007, with no warning given. The character at U+1F514 will not
+new name for U+0007 in Perl is C<ALERT>, which corresponds nicely
+with the existing shorthand sequence for it, C<"\a">. C<\N{BEL}>
+means U+0007, with no warning given. The character at U+1F514 will not
have a name in 5.14, but can be referred to by C<\N{U+1F514}>. The plan
is that in Perl 5.16, C<\N{BELL}> will refer to U+1F514, and so all code
that uses C<\N{BELL}> should convert by then to using C<\N{ALERT}>,
=head3 Assignment to C<$0> sets the legacy process name with C<prctl()> on Linux
-On Linux the legacy process name will be set with L<prctl(2)>, in
+On Linux the legacy process name is now set with L<prctl(2)>, in
addition to altering the POSIX name via C<argv[0]> as perl has done
-since version 4.000. Now system utilities that read the legacy process
+since version 4.000. Now system utilities that read the legacy process
name such as ps, top and killall will recognize the name you set when
-assigning to C<$0>. The string you supply will be cut off at 16 bytes,
+assigning to C<$0>. The string you supply will be cut off at 16 bytes;
this is a limitation imposed by Linux.
=head3 C<srand()> now returns the seed
In L<perlunicode/"User-Defined Character Properties">, it says you can
create custom properties by defining subroutines whose names begin with
-"In" or "Is". However, Perl did not actually enforce that naming
-restriction, so \p{foo::bar} could call foo::bar() if it existed. Now this
+"In" or "Is". However, Perl did not actually enforce that naming
+restriction, so \p{foo::bar} could call foo::bar() if it existed. Now this
convention has been enforced.
Also, Perl no longer allows a tainted regular expression to invoke a
-user-defined. It simply dies instead [perl #82616].
+user-defined property. It simply dies instead [perl #82616].
=head1 Incompatible Changes
double-quote-like contexts. Since 5.10.1, a deprecated warning message
has been raised when this happens. Now, all double-quote-like contexts
have the same behavior, namely to be equivalent to C<\x{100}> -
-C<\x{1FF}>, with no deprecation warning. Use of these values in the
+C<\x{1FF}>, with no deprecation warning. Use of these values in the
command line option C<"-0"> retains the current meaning to slurp input
files whole; previously, this was documented only for C<"-0777">. It is
recommended, however, because of various ambiguities, to use the new
$foo =~ $bar; # when $bar contains (?{...})
$foo =~ /$bar(?{ $finished = 1 })/;
-This was a bug, which has now been fixed. But it has the potential to break
+This was a bug, which has now been fixed. But
+it has the potential to break
any code that was relying on it.
=head2 Stashes and Package Variables
# here, @a refers again to the old, tied array
The new local array used to be made tied too, which was fairly pointless,
-and has now been fixed. This fix could however potentially cause a change
+and has now been fixed. This fix could however potentially cause a change
in behaviour of some code.
=head3 Stashes are now always defined
Calling defined on a stash has been deprecated since 5.6.0, warned on
lexicals since 5.6.0, and warned for stashes (and other package
-variables) since 5.12.0. C<defined %hash> has always exposed an
+variables) since 5.12.0. C<defined %hash> has always exposed an
implementation detail - emptying a hash by deleting all entries from it does
not make C<defined %hash> false, hence C<defined %hash> is not valid code to
-determine whether an arbitrary hash is empty. Instead, use the behaviour
+determine whether an arbitrary hash is empty. Instead, use the behaviour
that an empty C<%hash> always returns false in a scalar context.
+=head3 Clearing stashes
+
+Stash list assignment C<%foo:: = ()> used to make the stash anonymous
+temporarily while it was being emptied. Consequently, any of its
+subroutines referenced elsewhere would become anonymous (showing up as
+"(unknown)" in C<caller>). Now they retain their package names, such that
+C<caller> will return the original sub name if there is still a reference
+to its typeglob, or "foo::__ANON__" otherwise [perl #79208].
+
=head3 Dereferencing typeglobs
If you assign a typeglob to a scalar variable:
$glob = *foo;
the glob that is copied to C<$glob> is marked with a special flag
-indicating that the glob is just a copy. This allows subsequent assignments
-to C<$glob> to overwrite the glob. The original glob, however, is
+indicating that the glob is just a copy. This
+allows subsequent assignments to C<$glob> to
+overwrite the glob. The original glob, however, is
immutable.
-Many Perl operators did not distinguish between these two types of globs.
+Some Perl operators did not distinguish between these two types of globs.
This would result in strange behaviour in edge cases: C<untie $scalar>
-would do nothing if the last thing assigned to the scalar was a glob
+would not untie the scalar if the last thing assigned to it was a glob
(because it treated it as C<untie *$scalar>, which unties a handle).
Assignment to a glob slot (e.g., C<*$glob = \@some_array>) would simply
assign C<\@some_array> to C<$glob>.
copy. This allows operators that make a distinction between globs and
scalars to be modified to treat only immutable globs as globs. (C<tie>,
C<tied> and C<untie> have been left as they are for compatibility's sake,
-but will warn. See L</Deprecations>.)
+but will warn. See L</Deprecations>.)
This causes an incompatible change in code that assigns a glob to the
-return value of C<*{}> when that operator was passed a glob copy. Take the
+return value of C<*{}> when that operator was passed a glob copy. Take the
following code, for instance:
$glob = *foo;
*$glob = *bar;
The C<*$glob> on the second line returns a new immutable glob. That new
-glob is made an alias to C<*bar>. Then it is discarded. So the second
+glob is made an alias to C<*bar>. Then it is discarded. So the second
assignment has no effect.
See L<http://rt.perl.org/rt3/Public/Bug/Display.html?id=77810> for even
more detail.
-=head3 Clearing stashes
-
-Stash list assignment C<%foo:: = ()> used to make the stash anonymous
-temporarily while it was being emptied. Consequently, any of its
-subroutines referenced elsewhere would become anonymous (showing up as
-"(unknown)" in C<caller>). Now they retain their package names, such that
-C<caller> will return the original sub name if there is still a reference
-to its typeglob, or "foo::__ANON__" otherwise [perl #79208].
-
=head3 Magic variables outside the main package
In previous versions of Perl, magic variables like C<$!>, C<%SIG>, etc. would
=item *
+C<attributes> has been upgraded from version 0.12 to 0.14.
+
+=item *
+
C<Archive::Extract> has been upgraded from version 0.38 to 0.48.
Updates since 0.38 include: a safe print method that guards
=item *
-C<B> has been upgraded from version 1.23 to 1.27.
+C<Attribute::Handlers> has been upgraded from version 0.87 to 0.89.
+
+=item *
+
+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<Benchmark> has been upgraded from version 1.11 to 1.12.
+
+=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<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<DBM_Filter> has been upgraded from version 0.03 to 0.04.
+
+=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::Peek> has been upgraded from version 1.04 to 1.07.
+
+=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<DirHandle> has been upgraded from version 1.03 to 1.04.
+
+=item *
+
+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.2210.
+
+=item *
+
+C<Fcntl> has been upgraded from version 1.06 to 1.11.
+
+=item *
+
+C<File::Basename> has been upgraded from version 2.78 to 2.81.
+
+=item *
+
+C<File::CheckTree> has been upgraded from version 4.4 to 4.41.
+
+=item *
+
+C<File::Copy> has been upgraded from version 2.17 to 2.21.
+
+=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::Glob> has been upgraded from version 1.07 to 1.12.
+
+=item *
+
C<File::Spec> has been upgraded from version 3.31 to 3.33.
Several portability fixes were made in C<File::Spec::VMS>: a colon is now
=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<Hash::Util::FieldHash> has been upgraded from version 1.04 to 1.09.
+
+=item *
+
+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 *
-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
-closed or invalid.
+C<IO> has been upgraded from version 1.25_02 to 1.25_04.
+
+This version of C<IO> includes a new C<IO::Select>, which 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 closed or invalid.
=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> has been upgraded from version 1.08 to 1.11.
+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<mro> has been upgraded from version 1.02 to 1.07.
+
+=item *
+
+C<NDBM_File> has been upgraded from version 1.08 to 1.12.
This fixes a memory leak when DBM filters are used.
=item *
+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.08 to 1.09.
+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.11 to 1.12.
+C<Opcode> has been upgraded from version 1.15 to 1.18.
+
+=item *
+
+C<overload> has been upgraded from 1.10 to 1.13.
C<overload::Method> can now handle subroutines that are themselves blessed
into overloaded classes [perl #71998].
=item *
+C<PerlIO::encoding> has been upgraded from version 0.12 to 0.14.
+
+=item *
+
C<PerlIO::scalar> has been upgraded from 0.07 to 0.11.
A C<read> after a C<seek> beyond the end of the string no longer thinks it
=item *
+C<PerlIO::via> has been upgraded from version 0.09 to 0.11.
+
+=item *
+
+C<Pod::Html> has been upgraded from version 1.09 to 1.1.
+
+=item *
+
C<Pod::LaTeX> has been upgraded from version 0.58 to 0.59.
=item *
=item *
-C<POSIX> has been upgraded from 1.19 to 1.23.
+C<POSIX> has been upgraded from 1.19 to 1.24.
It now includes constants for POSIX signal constants.
=item *
+C<SDBM_File> has been upgraded from version 1.06 to 1.09.
+
+=item *
+
C<SelfLoader> has been upgraded from 1.17 to 1.18.
It now works in taint mode [perl #72062].
=item *
+C<Sys::Hostname> has been upgraded from version 1.11 to 1.16.
+
+=item *
+
C<Term::ANSIColor> has been upgraded from version 2.02 to 3.00.
=item *
=item *
+C<Tie::Hash::NamedCapture> has been upgraded from version 0.06 to 0.08.
+
+=item *
+
C<Tie::RefHash> has been upgraded from version 1.38 to 1.39.
=item *
The names returned by C<Win32::GetOSName> and C<Win32::GetOSDisplayName>
have been corrected.
+=item *
+
+C<XS::Typemap> has been upgraded from version 0.03 to 0.05.
+
=back
=head2 Removed Modules and Pragmata
=head3 L<perlsource>, L<perlinterp>, L<perlhacktut>, and L<perlhacktips>
-See L</L<perlhack> and perlrepository revamp>, below.
+See L</perlhack and perlrepository revamp>, below.
=head2 Changes to Existing Documentation
L<overload>'s documentation has practically undergone a rewrite. It
is now much more straightforward and clear.
-=head3 L<perlhack> and perlrepository revamp
+=head3 perlhack and perlrepository revamp
The L<perlhack> and perlrepository documents have been heavily edited and
split up into several new documents.
=item *
-What has become known as the "Unicode Bug" is mostly resolved in this release.
-Under C<use feature 'unicode_strings'>, the internal storage format of a
-string no longer affects the external semantics. There are two known
-exceptions. User-defined case changing functions, which are planned to
-be deprecated in 5.14, require utf8-encoded strings to function; and the
-character C<LATIN SMALL LETTER SHARP S> in regular expression
-case-insensitive matching has a somewhat different set of bugs depending
-on the internal storage format. Case-insensitive matching of all
-characters that have multi-character matches, as this one does, is
-problematical in Perl [perl #58182].
+What has become known as the "Unicode Bug" is almost completely resolved in
+this release. Under C<use feature 'unicode_strings'> (which is
+automatically selected by C<use 5.012> and above), the internal
+storage format of a string no longer affects the external semantics.
+[perl #58182].
+
+There are two known exceptions:
+
+=over
+
+=item 1
+
+The now-deprecated user-defined case changing
+functions require utf8-encoded strings to function. The CPAN module
+L<Unicode::Casing> has been written to replace this feature, without its
+drawacks, and the feature is scheduled to be removed in 5.16
+
+=item 2
+
+C<quotemeta> (and its in-line equivalent C<\Q>) also can give different
+results if a string is encoded in UTF-8 or not. See
+L<perlunicode/The "Unicode Bug">.
+
+=back
=item *
-The handling of Unicode non-characters has changed.
+The handling of Unicode non-character code points has changed.
Previously they were mostly considered illegal, except that only one of
the 66 of them was known about in places. The Unicode standard
considers them legal, but forbids the "open interchange" of them.
=item *
+Case-insensitive C<"/i"> regular expression matching of Unicode
+characters which match multiple characters now works much more as
+intended. For example
+
+ "\N{LATIN SMALL LIGATURE FFI}" =~ /ffi/ui
+
+and
+
+ "ffi" =~ /\N{LATIN SMALL LIGATURE FFI}/ui
+
+are both true. Previously, there were many bugs with this feature.
+What hasn't been fixed are the places where the pattern contains the
+multiple characters, but the characters are split up by other things,
+such as in
+
+ "\N{LATIN SMALL LIGATURE FFI}" =~ /(f)(f)i/ui
+
+or
+
+ "\N{LATIN SMALL LIGATURE FFI}" =~ /ffi*/ui
+
+or
+
+ "\N{LATIN SMALL LIGATURE FFI}" =~ /[a-f][f-m][g-z]/ui
+
+None of these match.
+
+Also, this matching doesn't fully conform to the current Unicode
+standard, which asks that the matching be made upon the NFD
+(Normalization Form .ecomposed) of the text. However, as of this
+writing, March 2010, the Unicode standard is currently in flux about
+what they will recommend doing with regard to such cases. It may be
+that they will throw out the whole concept of multi-character matches.
+[perl #71736].
+
+=item *
+
Naming a deprecated character in \N{...} no longer leaks memory.
=item *