This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
‘If you are upgrading from 5.13.6...’
[perl5.git] / pod / perldelta.pod
index c0a55cd..38750fa 100644 (file)
@@ -1,26 +1,20 @@
 =encoding utf8
 
-=for comment
-This has been completed up to 7cb18e1b02, except for:
-04777d295957ad270188e4debf51b523e07cc5b0
-c565ab54dc649bb62cd4d57149d7b2abb21df5f3
-1c8d11ca3d0ce8bc11562f159b94c2c7e62dea6c
-
 =head1 NAME
 
 [ this is a template for a new perldelta file. Any text flagged as
 XXX needs to be processed before release. ]
 
-perldelta - what is new for perl v5.13.7
+perldelta - what is new for perl v5.13.8
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.13.6 release and
+This document describes differences between the 5.13.8 release and
 the 5.13.7 release.
 
-If you are upgrading from an earlier release such as 5.13.5, first read
-L<perl5136delta>, which describes differences between 5.13.5 and
-5.13.6.
+If you are upgrading from an earlier release such as 5.13.6, first read
+L<perl5137delta>, which describes differences between 5.13.6 and
+5.13.7.
 
 =head1 Notice
 
@@ -34,95 +28,6 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 Single term prototype
-
-The C<+> prototype is a special alternative to C<$> that will act like
-C<\[@%]> when given a literal array or hash variable, but will otherwise
-force scalar context on the argument.  This is useful for functions which
-should accept either a literal array or an array reference as the argument:
-
-    sub smartpush (+@) {
-        my $aref = shift;
-        die "Not an array or arrayref" unless ref $aref eq 'ARRAY';
-        push @$aref, @_;
-    }
-
-When using the C<+> prototype, your function must check that the argument
-is of an acceptable type.
-
-=head2 C<use re '/flags';>
-
-The C<re> pragma now has the ability to turn on regular expression flags
-till the end of the lexical scope:
-
-    use re '/x';
-    "foo" =~ / (.+) /;  # /x implied
-
-See L<re/'/flags' mode> for details.
-
-=head2 Statement labels can appear in more places
-
-Statement labels can now occur before any type of statement or declaration,
-such as C<package>.
-
-=head2 C<use feature "unicode_strings"> now applies to more regex matching
-
-Another chunk of the L<perlunicode/The "Unicode Bug"> is fixed in this
-release.  Now, regular expressions compiled within the scope of the
-"unicode_strings" feature (or under the "u" regex modifier (specifiable
-currently only with infix notation C<(?u:...)> or via C<use re '/u'>)
-will match the same whether or not the target string is encoded in utf8,
-with regard to C<[[:posix:]]> character classes
-
-Work is underway to add the case sensitive matching to the control of
-this feature, but was not complete in time for this dot release.
-
-=head2 Array and hash container functions accept references
-
-All built-in functions that operate directly on array or hash
-containers now also accept hard references to arrays or hashes:
-
-  |----------------------------+---------------------------|
-  | Traditional syntax         | Terse syntax              |
-  |----------------------------+---------------------------|
-  | push @$arrayref, @stuff    | push $arrayref, @stuff    |
-  | unshift @$arrayref, @stuff | unshift $arrayref, @stuff |
-  | pop @$arrayref             | pop $arrayref             |
-  | shift @$arrayref           | shift $arrayref           |
-  | splice @$arrayref, 0, 2    | splice $arrayref, 0, 2    |
-  | keys %$hashref             | keys $hashref             |
-  | keys @$arrayref            | keys $arrayref            |
-  | values %$hashref           | values $hashref           |
-  | values @$arrayref          | values $arrayref          |
-  | ($k,$v) = each %$hashref   | ($k,$v) = each $hashref   |
-  | ($k,$v) = each @$arrayref  | ($k,$v) = each $arrayref  |
-  |----------------------------+---------------------------|
-
-This allows these built-in functions to act on long dereferencing chains
-or on the return value of subroutines without needing to wrap them in
-C<@{}> or C<%{}>:
-
-  push @{$obj->tags}, $new_tag;  # old way
-  push $obj->tags,    $new_tag;  # new way
-
-  for ( keys %{$hoh->{genres}{artists}} ) {...} # old way 
-  for ( keys $hoh->{genres}{artists}    ) {...} # new way 
-
-For C<push>, C<unshift> and C<splice>, the reference will auto-vivify
-if it is not defined, just as if it were wrapped with C<@{}>.
-
-Calling C<keys> or C<values> directly on a reference gives a substantial
-performance improvement over explicit dereferencing.
-
-For C<keys>, C<values>, C<each>, when overloaded dereferencing is
-present, the overloaded dereference is used instead of dereferencing the
-underlying reftype.  Warnings are issued about assumptions made in the
-following three ambiguous cases:
-
-  (a) If both %{} and @{} overloading exists, %{} is used
-  (b) If %{} overloading exists on a blessed arrayref, %{} is used
-  (c) If @{} overloading exists on a blessed hashref, @{} is used
-
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -140,51 +45,6 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
-=head2 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
-immutable.
-
-Many 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
-(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>.
-
-To fix this, the C<*{}> operator (including the C<*foo> and C<*$foo> forms)
-has been modified to make a new immutable glob if its operand is a glob
-copy. Various operators that make a distinction between globs and scalars
-have been modified to treat only immutable globs as globs.
-
-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
-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.
-
-The upside to this incompatible change is that bugs
-L<[perl #77496]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77496>,
-L<[perl #77502]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77502>,
-L<[perl #77508]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77508>,
-L<[perl #77688]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77688>,
-and
-L<[perl #77812]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77812>,
-and maybe others, too, have been fixed.
-
-See L<http://rt.perl.org/rt3/Public/Bug/Display.html?id=77810> for even
-more detail.
-
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -226,8 +86,7 @@ cribbed.
 
 =item *
 
-C<Unicode::Collate::CJK::JISX0208> module was added by the C<Unicode::Collate>
-upgrade from 0.63 to 0.64. See below.
+XXX
 
 =back
 
@@ -237,137 +96,7 @@ upgrade from 0.63 to 0.64. See below.
 
 =item *
 
-C<Archive::Extract> has been upgraded from 0.44 to 0.46
-
-Resolves an issue with NetBSD-current and its new unzip 
-executable.
-
-=item *
-
-C<B> has been upgraded from 1.24 to 1.25.
-
-=item *
-
-C<B::Deparse> has been upgraded from 0.99 to 1.01.
-
-It fixes deparsing of C<our> followed by a variable with funny characters
-(as permitted under the C<utf8> pragma)
-L<[perl #33752]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=33752>.
-
-=item *
-
-C<CPAN> has been upgraded from 1.94_61 to 1.94_62
-
-=item *
-
-C<CPANPLUS> has been upgraded from 0.9007 to 0.9010
-
-Fixes for the SQLite source engine and resolving of issues with the
-testsuite when run under local::lib and/or cpanminus
-
-=item *
-
-C<CPANPLUS::Dist::Build> has been upgraded from 0.48 to 0.50
-
-=item *
-
-C<ExtUtils::Constant> has been upgraded from 0.22 to 0.23.
-
-=item *
-
-C<Fcntl> has been upgraded from 1.09 to 1.10.
-
-=item *
-
-C<File::Glob> has been upgraded from 1.09 to 1.10.
-
-=item *
-
-C<GDBM_File> has been upgraded from 1.11 to 1.12.
-
-This fixes a memory leak when DBM filters are used.
-
-=item *
-
-C<Hash::Util> has been upgraded from 0.09 to 0.10.
-
-=item *
-
-C<Hash::Util::FieldHash> has been upgraded from 1.05 to 1.06.
-
-=item *
-
-C<I18N::Langinfo> has been upgraded from 0.06 to 0.07.
-
-=item *
-
-C<Locale::Maketext> has been upgraded from 1.16 to 1.17
-
-=item *
-
-C<Math::BigInt::FastCalc> has been upgraded from 0.22 to 0.23.
-
-=item *
-
-C<mro> has been upgraded from 1.04 to 1.05.
-
-=item *
-
-C<NDBM_File> has been upgraded from 1.09 to 1.10.
-
-This fixes a memory leak when DBM filters are used.
-
-=item *
-
-C<ODBM_File> has been upgraded from 1.08 to 1.09.
-
-This fixes a memory leak when DBM filters are used.
-
-=item *
-
-C<parent> has been upgraded from 0.223 to 0.224
-
-=item *
-
-C<POSIX> has been upgraded from 1.21 to 1.22.
-
-=item *
-
-C<re> has been upgraded from 0.13 to 0.14, for the sake of the new
-C<use re "/flags"> pragma.
-
-=item *
-
-C<Safe> has been upgraded from 2.28 to 2.29.
-
-It adds C<&version::vxs::VCMP> to the default share.
-
-=item *
-
-C<SDBM_File> has been upgraded from 1.07 to 1.08.
-
-=item *
-
-C<SelfLoader> has been upgraded from 1.17 to 1.18.
-
-It now works in taint mode
-L<[perl #72062]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72062>.
-
-=item *
-
-C<Socket> has been upgraded from 1.90 to 1.91.
-
-=item *
-
-C<Sys::Hostname> has been upgraded from 1.13 to 1.14.
-
-=item *
-
-C<Unicode::Collate> has been upgraded from 0.63 to 0.64
-
-This release newly adds locale C<ja> and the module
-C<Unicode::Collate::CJK::JISX0208> which makes tailoring of 6355 kanji 
-(CJK Unified Ideographs) in the JIS X 0208 order.
+XXX
 
 =back
 
@@ -400,19 +129,6 @@ XXX Changes which significantly change existing files in F<pod/> go here.
 However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
 section.
 
-=over
-
-=item *
-
-Array and hash slices in scalar context are now documented in L<perldata>.
-
-=item *
-
-L<perlform> and L<perllocale> have been corrected to state that
-C<use locale> affects formats.
-
-=back
-
 =head3 L<XXX>
 
 =over 4
@@ -555,11 +271,9 @@ L</Modules and Pragmata> section.
 
 =over 4
 
-=item Windows
+=item XXX-some-platform
 
-Directory handles are now properly cloned when threads are created. In perl
-5.13.6, child threads simply stopped inheriting directory handles. In
-previous versions, threads would share handles, resulting in crashes.
+XXX
 
 =back
 
@@ -575,61 +289,7 @@ be noted as well.
 
 =item *
 
-C<lex_start> has been added to the API, but is considered experimental.
-
-=item *
-
-A new C<parse_block> function has been added to the API
-L<[perl #78222]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78222>.
-
-=item *
-
-A new, experimental API has been added for accessing the internal
-structure that Perl uses for C<%^H>. See the functions beginning with
-C<cophh_> in L<perlapi>.
-
-=item *
-
-A stash can now have a list of effective names in addition to its usual
-name. The first effective name can be accessed via the C<HvENAME> macro,
-which is now the recommended name to use in MRO linearisations (C<HvNAME>
-being a fallback if there is no C<HvENAME>).
-
-These names are added and deleted via C<hv_ename_add> and
-C<hv_ename_delete>. These two functions are I<not> part of the API.
-
-=item *
-
-The way the parser handles labels has been cleaned up and refactored. As a
-result, the C<newFOROP()> constructor function no longer takes a parameter
-stating what label is to go in the state op.
-
-=item *
-
-The C<newWHILEOP()> and C<newFOROP()> functions no longer accept a line
-number as a parameter.
-
-=item *
-
-A new C<parse_barestmt()> function has been added, for parsing a statement
-without a label.
-
-=item *
-
-A new C<parse_label()> function has been added, that parses a statement
-labels, separate from statements.
-
-=item *
-
-The C<CvSTASH()> macro can now only be used as an rvalue. C<CvSTASH_set()>
-has been added to replace assignment to C<CvSTASH()>. This is to ensure
-that backreferences are handled properly. These macros are not part of the
-API.
-
-=item *
-
-The C<op_scope()> and C<op_lvalue()> functions have been added to the API,
-but are considered experimental.
+XXX
 
 =back
 
@@ -645,105 +305,7 @@ L</Modules and Pragmata>.
 
 =item *
 
-The C<parse_stmt> C function added in earlier in the 5.13.x series has been
-fixed to work with statements ending with C<}>
-L<[perl #78222]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78222>.
-
-=item *
-
-The C<parse_fullstmt> C function added in 5.13.5 has been fixed to work
-when called while an expression is being parsed.
-
-=item *
-
-Characters in the Latin-1 non-ASCII range (0x80 to 0xFF) used not to match
-themselves if the string happened to be UTF8-encoded internally, the
-regular expression was not, and the character in the regular expression was
-inside a repeated group (e.g.,
-C<Encode::decode_utf8("\303\200") =~ /(\xc0)+/>)
-L<[perl #78464]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78464>.
-
-=item *
-
-The C<(?d)> regular expression construct now overrides a previous C<(?u)>
-or C<use feature "unicode_string">
-L<[perl #78508]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78508>.
-
-=item *
-
-A memory leak in C<do "file">, introduced in perl 5.13.6, has been fixed
-L<[perl #78488]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78488>.
-
-=item *
-
-Various bugs related to typeglob dereferencing have been fixed. See
-L</Dereferencing typeglobs>, above.
-
-=item *
-
-The C<SvPVbyte> function available to XS modules now calls magic before
-downgrading the SV, to avoid warnings about wide characters
-L<[perl #72398]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72398>.
-
-=item *
-
-The C<=> operator used to ignore magic (e.g., tie methods) on its
-right-hand side if the scalar happened to hold a typeglob. This could
-happen if a typeglob was the last thing returned from or assigned to a tied
-scalar
-L<[perl #77498]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77498>.
-
-=item *
-
-C<sprintf> was ignoring locales when called with constant arguments
-L<[perl #78632]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78632>.
-
-=item *
-
-A non-ASCII character in the Latin-1 range could match both a Posix
-class, such as C<[[:alnum:]]>, and its inverse C<[[:^alnum:]]>.  This is
-now fixed for regular expressions compiled under the C<"u"> modifier.
-See L</C<use feature "unicode_strings"> now applies to more regex matching>.
-L<[perl #18281]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=18281>.
-
-=item *
-
-Concatenating long strings under C<use encoding> no longer causes perl to
-crash
-L<[perl #78674]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78674>.
-
-=item *
-
-Typeglob assignments would crash if the glob's stash no longer existed, if
-the glob assigned to was named 'ISA' or the glob on either side of the
-assignment contained a subroutine.
-
-=item *
-
-Calling C<< ->import >> on a class lacking an import method could corrupt the stack result in strange behaviour. For instance,
-
-  push @a, "foo", $b = bar->import;
-
-would assign 'foo' to C<$b>
-L<[perl #63790]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=63790>.
-
-=item *
-
-Creating an alias to a package when that package had been detached from the
-symbol table would result in corrupted isa caches
-L<[perl #77358]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=77358>.
-
-=item *
-
-C<.=> followed by C<< <> >> or C<readline> would leak memory if C<$/>
-contained characters beyond the octet range and the scalar assigned to
-happened to be encoded as UTF8 internally
-L<[perl #72246]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=72246>.
-
-=item *
-
-The C<recv> function could crash when called with the MSG_TRUNC flag
-L<[perl #75082]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75082>.
+XXX
 
 =back
 
@@ -782,7 +344,7 @@ 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.
 
-If you believe you have an unreported bug, please run the B<perlbug>
+If you believe you have an unreported bug, please run the L<perlbug>
 program included with your release.  Be sure to trim your bug down
 to a tiny but sufficient test case.  Your bug report, along with the
 output of C<perl -V>, will be sent off to perlbug@perl.org to be