This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Move 2 similar entries about stashes closer
[perl5.git] / pod / perldelta.pod
index 584ca79..0d39a7f 100644 (file)
@@ -40,9 +40,9 @@ phones.  This conflicts with the long-standing Perl usage of having
 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}>,
@@ -372,11 +372,11 @@ result of stringifying the object.
 
 =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
@@ -489,12 +489,12 @@ See L</Internal Changes>.
 
 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
 
@@ -511,7 +511,7 @@ different, anomalous behavior than their use in all other
 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
@@ -589,7 +589,8 @@ was compiled at run time as happens in cases like these two:
   $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
@@ -606,7 +607,7 @@ In the following:
     # 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
@@ -620,12 +621,21 @@ hashes that drastically reduce their memory usage overhead.
 
 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:
@@ -633,13 +643,14 @@ 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>.
@@ -649,31 +660,22 @@ has been modified to make a new immutable glob if its operand is a 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
@@ -1183,6 +1185,10 @@ prerequisites and version constraints as defined in the L<CPAN::Meta::Spec>.
 
 =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
@@ -1232,7 +1238,19 @@ Pax extended headers are now skipped.
 
 =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.
@@ -1242,7 +1260,7 @@ reduction in functionality.
 
 =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".
@@ -1252,7 +1270,11 @@ It no longer produces mangled output with the C<-tree> option
 
 =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
@@ -1270,7 +1292,23 @@ Deparsing of C<our> followed by a variable with funny characters
 
 =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,
@@ -1290,7 +1328,7 @@ errors' error that will ensue if there has been a syntax error
 
 =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 
@@ -1304,6 +1342,10 @@ It has been updated to use bzip2 1.0.6.
 
 =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:
@@ -1345,6 +1387,10 @@ CPANPLUS now includes support for META.json and MYMETA.json.
 
 =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
@@ -1358,6 +1404,14 @@ C<Dumpxs> no longer crashes with globs returned by C<*$io_ref>
 
 =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.
@@ -1371,6 +1425,14 @@ profiling and reporting.
 
 =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
@@ -1396,7 +1458,15 @@ New SHA-512/224 and SHA-512/256 transforms (ref. NIST Draft FIPS 180-4
 
 =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.
 
@@ -1414,6 +1484,10 @@ disallowed; in those cases where it warned, all 66 warn.
 
 =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.
@@ -1430,6 +1504,14 @@ Exporter no longer overrides C<$SIG{__WARN__}> [perl #74472]
 
 =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>
@@ -1443,7 +1525,27 @@ constants onto the package's C<@EXPORT_OK>.
 
 =item *
 
-C<ExtUtils::ParseXS> has been upgraded from version 2.21 to 2.2209.
+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 *
 
@@ -1451,6 +1553,10 @@ 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
@@ -1477,6 +1583,10 @@ 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
@@ -1511,6 +1621,10 @@ recursively locking hashes that have undefined values [perl #74280].
 
 =item *
 
+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 *
@@ -1532,13 +1646,9 @@ C<if> has been upgraded from version 0.05 to 0.0601.
 
 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
-closed or invalid.
+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 *
 
@@ -1654,7 +1764,11 @@ 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.
+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.
 
@@ -1678,7 +1792,11 @@ This fixes a memory leak when DBM filters are used.
 
 =item *
 
-C<overload> has been upgraded from 1.10 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].
@@ -1702,6 +1820,10 @@ L<CPAN::Meta::YAML> and L<JSON::PP>, which are now part of the Perl core.
 
 =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
@@ -1709,6 +1831,14 @@ has data to read [perl #78716].
 
 =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 *
@@ -1749,6 +1879,10 @@ It adds several version::vxs::* routines to the default share.
 
 =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].
@@ -1783,6 +1917,10 @@ during freezing [perl #80074].
 
 =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 *
@@ -1827,6 +1965,10 @@ Calling C<< Tie::Hash-E<gt>TIEHASH() >> used to loop forever.  Now it C<croak>s.
 
 =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 *
@@ -1982,6 +2124,10 @@ C<Win32::GetProductInfo>, C<Win32::GetOSDisplayName>.
 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
@@ -2030,7 +2176,7 @@ split mostly from the NOTES section of the pod2man man page.
 
 =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
 
@@ -2154,7 +2300,7 @@ C<use locale> affects formats.
 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.
@@ -3518,20 +3664,34 @@ again and, if the entries are re-created too many times, dies with a
 
 =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.
@@ -3541,6 +3701,43 @@ This is part of the change to allow the internal use of any code point
 
 =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 *