This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for e7d0a3fbd9 (tying PVMG COWs)
[perl5.git] / pod / perldelta.pod
index 8282439..196439b 100644 (file)
@@ -1,24 +1,25 @@
 =encoding utf8
 
 =for comment
-This has been completed up to 3ea0c5818 except for:
-a1da11a30dfa4f3543dcab00834ff535202f5085 (GNU/Hurd hints)
+This has been completed up to e7d0a3fbd9, except for
+e032854 khw     [perl #32080] is_utf8_string() reads too far
+b0f2e9e nwclark Fix two bugs related to pod files outside of pod/ (important enough?)
 
 =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.15.5
+perldelta - what is new for perl v5.15.6
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.4 release and
-the 5.15.5 release.
+This document describes differences between the 5.15.5 release and
+the 5.15.6 release.
 
-If you are upgrading from an earlier release such as 5.15.3, first read
-L<perl5154delta>, which describes differences between 5.15.3 and
-5.15.4.
+If you are upgrading from an earlier release such as 5.15.4, first read
+L<perl5155delta>, which describes differences between 5.15.4 and
+5.15.5.
 
 =head1 Notice
 
@@ -30,15 +31,25 @@ XXX New core language features go here. Summarise user-visible core language
 enhancements. Particularly prominent performance optimisations could go
 here, but most should go in the L</Performance Enhancements> section.
 
-=head2 C<$[> is back
+[ List each enhancement as a =head2 entry ]
 
-The C<$[> variable is back again, but is now implemented as a module, so
-programs that do not mention it (i.e., most of them), will not incur any
-run-time penalty.  It is disabled in the scope of C<use v5.16>.
+=head2 C<__SUB__>
 
-XXX That last sentence is not true yet.
+The new C<__SUB__> token, available under the "current_sub" feature (see
+L<feature>) or C<use v5.15>, returns a reference to the current subroutine,
+making it easier to write recursive closures.
 
-The new implementation has some bug fixes.  See L<arybase>.
+=head2 New option for the debugger's B<t> command
+
+The B<t> command in the debugger, which toggles tracing mode, now accepts a
+numerical argument that determines how many levels of subroutine calls to
+trace.
+
+=head2 Return value of C<tied>
+
+The value returned by C<tied> on a tied variable is now the actual scalar
+that holds the object to which the variable is tied.  This allows ties to
+be weakened with C<Scalar::Util::weaken(tied $tied_variable)>.
 
 =head1 Security
 
@@ -57,6 +68,82 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
+=head2 C<substr> lvalue revamp
+
+When C<substr> is called in lvalue or potential lvalue context with two or
+three arguments, a special lvalue scalar is returned that modifies the
+original string (the first argument) when assigned to.
+
+Previously, the offsets (the second and third arguments) passed to
+C<substr> would be converted immediately to match the string, negative
+offsets being translated to positive and offsets beyond the end of the
+string being truncated.
+
+Now, the offsets are recorded without modification in the special lvalue
+scalar that is returned, and the original string is not even looked at by
+C<substr> itself, but only when the returned lvalue is read or modified.
+
+These changes result in several incompatible changes and bug fixes:
+
+=over
+
+=item *
+
+If the original string changes length after the call to C<substr> but
+before assignment to its return value, negative offsets will remember
+their position from the end of the string, affecting code like this:
+
+    my $string = "string";
+    my $lvalue = \substr $string, -4, 2;
+    print $lvalue, "\n"; # prints "ri"
+    $string = "bailing twine";
+    print $lvalue, "\n"; # prints "wi"; used to print "il"
+
+The same thing happens with an omitted third argument.  The returned lvalue
+will always extend to the end of the string, even if the string becomes
+longer.
+
+=item *
+
+Tied (and otherwise magical) variables are no longer exempt from the
+"Attempt ot use reference as lvalue in substr" warning.
+
+=item *
+
+That warning now occurs when the returned lvalue is assigned to, not when
+C<substr> itself is called.  This only makes a difference if the return
+value of C<substr> is referenced and assigned to later.
+
+=item *
+
+The order in which "uninitialized" warnings occur for arguments to
+C<substr> has changed.
+
+=item *
+
+Passing a substring of a read-only value or a typeglob to a function (potential lvalue context) no longer causes an immediate "Can't coerce" or "Modification of a read-only value" error.  That error only occurs if and
+when the value passed is assigned to.
+
+The same thing happens with the "substr outside of string" error.  If the
+lvalue is only read, not written to, it is now just a warning, as with
+rvalue C<substr>.
+
+=item *
+
+C<substr> assignments no longer call FETCH twice if the first argument is a
+tied variable, but just once.
+
+=back
+
+It was impossible to fix all the bugs without an incompatible change, and
+the behaviour of negative offsets was never specified, so the change was
+deemed acceptable.
+
+=head2 XS API tweak
+
+The C<newCONSTSUB_flags> C-level function, added in 5.15.4, now has a
+C<len> parameter.
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -65,16 +152,6 @@ listed as an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
-=head2 Don't read the Unicode data base files in F<lib/unicore>
-
-It is now deprecated to directly read the Unicode data base files.
-These are stored in the F<lib/unicore> directory.  Instead, you should
-use the new functions in L<Unicode::UCD>.  These provide a stable API,
-and give complete information.  Perl may at some point in the future
-change or remove the files.  The most likely of these files to be used
-is F<lib/unicore/ToDigit.pl>.  L<Unicode::UCD/prop_invmap()> can be used
-to get at its data instead.
-
 =head1 Performance Enhancements
 
 XXX Changes which enhance performance without changing behaviour go here. There
@@ -86,12 +163,29 @@ may well be none in a stable release.
 
 =item *
 
-Due to changes in L<File::Glob>, Perl's C<glob> function and its
-C<< <...> >> equivalent are now much faster.  The splitting of the pattern
-into words has been rewritten in C, resulting in speed-ups of 20% in some
-cases.
+Perl 5.12.0 sped up the destruction of objects whose classes define empty
+C<DESTROY> methods (to prevent autoloading), simply by not calling such
+empty methods.  This release takes this optimisation a step further, by not
+calling any C<DESTROY> method that begins with an C<return> statement.
+This can be useful for destructors that are only used for debugging:
+
+    use constant DEBUG => 1;
+    sub DESTROY { return unless DEBUG; ... }
+
+Constant-folding will reduce the first statement to C<return;> if DEBUG is
+set to 0, triggering this optimisation.
+
+=item *
+
+Assign to a variable that holds a typeglob or copy-on-write scalar is now
+much faster.  Previously the typeglob would be stringified or the
+copy-on-write scalar would be copied before being clobbered.
+
+=item *
 
-This does not affect VMS, as it does not use File::Glob.
+Assignment to a substring in void context is now more than twice its
+previous speed.  Instead of creating and returning a special lvalue scalar
+that is then assigned to, C<substr> modifies the original string itself.
 
 =back
 
@@ -113,7 +207,7 @@ cribbed.
 
 =item *
 
-L<arybase> -- this new module implements the C<$[> variable.
+XXX
 
 =back
 
@@ -123,116 +217,112 @@ L<arybase> -- this new module implements the C<$[> variable.
 
 =item *
 
-L<Archive::Extract> has been upgraded from version 0.56 to version 0.58.
+L<Archive::Tar> has been upgraded from version 1.80 to version 1.82.
+
+Adjustments to handle files >8gb (>0777777777777 octal) and a feature to
+return the MD5SUM of files in the archive.
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.08 to 1.08.
+L<AutoLoader> has been upgraded from version 5.71 to version 5.72.
 
-It now correctly deparses C<CORE::do> and C<CORE::glob>.
+=item *
+
+L<B::Debug> has been upgraded from version 1.16 to version 1.17.
 
 =item *
 
-L<CGI> has been upgraded from version 3.55 to version 3.57.
+L<B::Deparse> has been upgraded from version 1.09 to 1.10.
 
-Use public and documented FCGI.pm API in CGI::Fast
-CGI::Fast was using an FCGI API that was deprecated and removed from
-documentation more than ten years ago. Usage of this deprecated API with
-FCGI >= 0.70 or FCGI <= 0.73 introduces a security issue.
-L<https://rt.cpan.org/Public/Bug/Display.html?id=68380>
-L<http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-2766>
+C<sort(foo(bar))> is now deparsed correctly. (C<sort foo(bar)>, how it used
+to deparse, makes foo the sort routine, rather than a regular function
+call.)
 
 =item *
 
-L<Compress::Raw::Bzip2> has been upgraded from version 2.037 to version 2.040.
+L<Compress::Raw::Zlib> has been upgraded from version 2.042 to version 2.045.
 
 =item *
 
-L<Compress::Raw::Zlib> has been upgraded from version 2.037 to version 2.040.
+L<Compress::Raw::Bzip2> has been upgraded from version 2.042 to version 2.045.
 
 =item *
 
-L<Compress::Zlib> has been upgraded from version 2.037 to version 2.040.
+L<CPANPLUS> has been upgraded from version 0.9112 to version 0.9113.
 
 =item *
 
-L<CPANPLUS> has been upgraded from version 0.9111 to version 0.9112.
+L<Data::Dumper> has been upgraded from version 2.134 to 2.135.
+
+The XS implementation has been updated to account for the Unicode symbol
+changes in Perl 5.15.4.  It also knows how to output typeglobs with nulls
+in their names.
 
 =item *
 
-L<CPANPLUS::Dist::Build> has been upgraded from version 0.58 to version 0.60.
+L<ExtUtils::ParseXS> has been upgraded from version 3.05 to version 3.07.
 
 =item *
 
-L<Digest::SHA> has been upgraded from version 5.62 to version 5.63.
+L<IO::Compress::Base> has been upgraded from version 2.042 to version 2.045.
 
-Added code to allow very large data inputs all at once, which had previously been
-limited to several hundred megabytes at a time
+Added zipdetails utility.
 
 =item *
 
-L<ExtUtils::MakeMaker> has been upgraded from version 6.61_01 to version 6.63_02.
-
-=item *
+L<Locale::Codes> has been upgraded from version 3.18 to version 3.20.
 
-L<File::Glob> has been upgrade from version 1.13 to 1.14.
+The code2XXX, XXX2code, all_XXX_codes, and all_XXX_names functions now support retired codes.
+All codesets may be specified by a constant or by their name now. Previously,
+they were specified only by a constant.
+The alias_code function exists for backward compatibility. It has been replaced by rename_country_code.
+The alias_code function will be removed sometime after September, 2013.
+All work is now done in the central module (Locale::Codes). Previously, some was still done in the
+wrapper modules (Locale::Codes::*) but that is gone now.
+Added Language Family codes (langfam) as defined in ISO 639-5.
 
-It has a new C<:bsd_glob> export tag, intended to replace C<:glob>.  Like
-C<:glob> it overrides C<glob> with a function that does not split the glob
-pattern into words, but, unlike C<:glob>, it iterates properly in scalar
-context, instead of returning the last file.
+=item *
 
-There are other changes affecting Perl's own C<glob> operator (which uses
-File::Glob internally, except on VMS).  See L</Performance Enhancements>
-and L</Selected Bug Fixes>.
+L<Module::Loaded> has been uprgaded from version 0.06 to version 0.08.
 
 =item *
 
-L<HTTP::Tiny> has been upgraded from version 0.013 to version 0.016.
+L<Pod::LaTeX> has been upgraded from version 0.59 to version 0.60.
+
+Added another LaTeX escape: --- => -{}-{}-
 
-Adds additional shorthand methods for all common HTTP verbs,
-a C<post_form()> method for POST-ing x-www-form-urlencoded data and
-a C<www_form_urlencode()> utility method.
+Pod::LaTeX doesn't handle -- in PODs specially, passing it directly to
+LaTeX, which then proceeds to replace it with a single -. This patch
+replaces ----- with -{}-{}-{}-{}-
 
 =item *
 
-L<perlfaq> has been upgraded from version 5.0150035 to version 5.0150036.
+L<POSIX> has been upgraded from version 1.26 to 1.27.
 
-=item *
+It no longer produces a "Constant subroutine TCSANOW redefined" warning on
+Windows.
 
-L<Socket> as been upgraded from version 1.94_01 to 1.94_02.
+XXX When did it start producing that warning?  Was it post-5.15.5?  Even if
+it was not, adding a note will help whoever compiles perl5160delta.
 
-It has new functions and constants for handling IPv6 sockets:
+=item *
 
-    pack_ipv6_mreq
-    unpack_ipv6_mreq
-    IPV6_ADD_MEMBERSHIP
-    IPV6_DROP_MEMBERSHIP
-    IPV6_MTU
-    IPV6_MTU_DISCOVER
-    IPV6_MULTICAST_HOPS
-    IPV6_MULTICAST_IF
-    IPV6_MULTICAST_LOOP
-    IPV6_UNICAST_HOPS
-    IPV6_V6ONLY
+L<Socket> has been upgraded from version 1.94_02 to version 1.96.
 
 =item *
 
-L<Unicode::Collate> has been upgraded from version 0.80 to version 0.84.
+L<Unicode::Collate> has been upgraded from version 0.85 to version 0.87.
 
-Locales updated to CLDR 2.0: mk, mt, nb, nn, ro, ru, sk, sr, sv, uk
-Newly supported locales: fa, ml, mr, or, pa, si, si__dictionary,
-sr_Latn, sv__reformed, ta, te, th, ur, wae.
+Tailored compatibility ideographs as well as unified ideographs for
+the locales: ja, ko, zh__big5han, zh__gb2312han, zh__pinyin, zh__stroke.
+
+Now Locale/*.pl files are searched in @INC.
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.36 to version 0.37.
-This adds four new functions:  C<prop_aliases()>, and
-C<prop_value_aliases()> which are used to find all the Unicode-approved
-synonyms for property names, or to convert from one name to another;
-C<prop_invlist> which returns all the code points matching a given
-Unicode binary property; and C<prop_invmap> which returns the complete
-specification of a given Unicode property.
+L<UNIVERSAL> has been upgraded from version 1.10 to 1.11.
+
+Documentation change clarifies return values from UNIVERSAL::VERSION.
 
 =back
 
@@ -324,7 +414,20 @@ XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =item *
 
-XXX Describe change here
+Redefinition warnings for constant subroutines used to be mandatory, even
+occurring under C<no warnings>.  Now they respect the L<warnings> pragma.
+
+=item *
+
+The "Attempt to free non-existent shared string" has had the spelling of
+"non-existent" corrected to "nonexistent".  It was already listed with the
+correct spelling in L<perldiag>.
+
+=item *
+
+The 'Use of "foo" without parentheses is ambiguous' warning has been
+extended to apply also to user-defined subroutines with a (;$) prototype,
+and not just to built-in functions.
 
 =back
 
@@ -337,13 +440,14 @@ here. Most of these are built within the directories F<utils> and F<x2p>.
 entries for each change
 Use L<XXX> with program names to get proper documentation linking. ]
 
-=head3 L<XXX>
+=head3 L<zipdetails>
 
 =over 4
 
 =item *
 
-XXX
+L<zipdetails> displays information about the internal record structure of the zip file.
+It is not concerned with displaying any details of the compressed data stored in the zip file.
 
 =back
 
@@ -360,7 +464,16 @@ L</Platform Support> section, instead.
 
 =item *
 
-XXX
+F<pod/roffitall> is now build by F<pod/buildtoc>, instead of being shipped
+with the distribution. Its list of manpages is now generated (and therefore
+current). See also RT #103202 for an unresolved related issue.
+
+=item *
+
+Perl 5.15.5 had a bug in its installation script, which did not install
+F<unicore/Name.pm>.  This has been corrected [perl #104226].
+
+XXX Is that Perl version correct?  Is the file path correct?
 
 =back
 
@@ -378,7 +491,10 @@ that they represent may be covered elsewhere.
 
 =item *
 
-XXX
+The F<substr.t> and F<substr_thr.t> scripts for testing C<substr> have been
+moved under F<t/op/>, where they were originally.  They had been moved
+under F<t/re/> along with the substitution tests when that directory was
+created.
 
 =back
 
@@ -443,7 +559,7 @@ be noted as well.
 
 =item *
 
-C<PL_curstash> is now reference-counted.
+XXX
 
 =back
 
@@ -459,75 +575,137 @@ L</Modules and Pragmata>.
 
 =item *
 
-Perl now holds an extra reference count on the package that code is
-currently compiling in.  This means that the following code no longer crashes [perl #101486]:
+A constant subroutine assigned to a glob whose name contains a null will no
+longer cause extra globs to pop into existence when the constant is
+referenced under its new name.
+
+=item *
+
+C<sort> was not treating C<sub {}> and C<sub {()}> as equivalent when such
+a sub was provided as the comparison routine.  It used to croak on
+C<sub {()}>.
+
+=item *
+
+Subroutines from the C<autouse> namespace are once more exempt from
+redefinition warnings.  This used to work in 5.005, but was broken in 5.6
+for most subroutines.  For subs created via XS that redefine subroutines
+from the C<autouse> package, this stopped working in 5.10.
+
+=item *
+
+New XSUBs now produce redefinition warnings if they overwrite existing
+subs, as they did in 5.8.x.  (The C<autouse> logic was reversed in 5.10-14.
+Only subroutines from the C<autouse> namespace would warn when clobbered.)
+
+=item *
+
+Redefinition warnings triggered by the creation of XSUBs now respect
+Unicode glob names, instead of using the internal representation.  This was
+missed in 5.15.4, partly because this warning was so hard to trigger.  (See
+the previous item.)
+
+=item *
+
+C<newCONSTSUB> used to use compile-time warning hints, instead of run-time
+hints.  The following code should never produce a redefinition warning, but
+it used to, if C<newCONSTSUB> redefine and existing subroutine:
+
+    use warnings;
+    BEGIN {
+       no warnings;
+       some_XS_function_that_calls_new_CONSTSUB();
+    }
+
+=item *
+
+Redefinition warnings for constant subroutines are on by default (what are
+known as severe warnings in L<perldiag>).  This was only the case when it
+was a glob assignment or declaration of a Perl subroutine that caused the
+warning.  If the creation of XSUBs triggered the warning, it was not a
+default warning.  This has been corrected.
+
+=item *
+
+The internal check to see whether a redefinition warning should occur used
+to emit "uninitialized" warnings in cases like this:
 
-    package Foo;
-    BEGIN {*Foo:: = *Bar::}
-    sub foo;
+    use warnings "uninitialized";
+    use constant {u=>undef,v=>undef};
+    sub foo(){u} sub foo(){v}
 
 =item *
 
-F<dumpvar.pl>, and consequently the C<x> command in the debugger, have been
-fixed to handle objects blessed into classes whose names contain "=".  The
-contents of such objects used not to be dumped [perl #101814].
+A bug fix in Perl 5.14 introduced a new bug, causing "uninitialized"
+warnings to report the wrong variable if the operator in question has
+two operands and one is C<%{...}> or C<@{...}>.  This has been fixed
+[perl #103766].
 
 =item *
 
-The C<x> repetition operator no longer crashes on 64-bit builds with large
-repeate counts [perl #94560].
+C<< version->new("version") >> and C<printf "%vd", "version"> no longer
+crash [perl #102586].
 
 =item *
 
-A fix to C<glob> under miniperl (used to configure modules when perl itself
-is built) in Perl 5.15.3 stopped C<< <~> >> from returning the home
-directory, because it cleared %ENV before calling csh.  Now C<$ENV{HOME}>
-is preserved.  This fix probably does not affect anything.  If
-L<File::Glob> fails to load for some reason, Perl reverts to using csh.
-So it would apply in that case.
+C<$tied =~ y/a/b/>, C<chop $tied> and C<chomp $tied> now call FETCH just
+once when $tied holds a reference.
 
 =item *
 
-On OSes other than VMS, Perl's C<glob> operator (and the C<< <...> >> form)
-use L<File::Glob> underneath.  L<File::Glob> splits the pattern into words,
-before feeding each word to its C<bsd_glob> function.
+Four-argument C<select> now always calls FETCH on tied arguments.  It used
+to skip the call if the tied argument happened to hold C<undef> or a
+typeglob.
+
+=item *
+
+Four-argument C<select> no longer produces its "Non-string passed as
+bitmask" warning on tied or tainted variables that are strings.
+
+=item *
+
+C<sysread> now always calls FETCH on the buffer passed to it if it is tied.
+It used to skip the call if the tied variable happened to hold a typeglob.
+
+=item *
+
+C<< $tied .= <> >> now calls FETCH once on C<$tied>.  It used to call it
+multiple times if the last value assigned to or returned from the tied
+variable was anything other than a string or typeglob.
+
+=item *
 
-There were several inconsistencies in the way the split was done.  Now
-quotation marks (' and ") are always treated as shell-style word delimiters
-(that allow whitespace as part of a word) and backslashes are always
-preserved, unless they exist to escape quotation marks.  Before, those
-would only sometimes be the case, depending on whether the pattern
-contained whitespace.  Also, escaped whitespace at the end of the pattern
-is no longer stripped.
+The C<evalbytes> keyword added in 5.15.5 was respecting C<use utf8>
+declarations from the outer scope, when it should have been ignoring them.
 
 =item *
 
-C<CORE::glob> now works as a way to call the default globbing function.  It
-used to respect overrides, despite the C<CORE::> prefix.
+C<goto &func> no longers crashes, but produces an error message, when the
+unwinding of the current subroutine's scope fires a destructor that
+undefines the subroutine being "goneto" [perl #99850].
 
 =item *
 
-In 5.14, C</[[:lower:]]/i> and C</[[:upper:]]/i> no longer matched the
-opposite case.  This has been fixed [perl #101970].
+Arithmetic assignment (C<$left += $right>) involving overloaded objects that
+rely on the 'nomethod' override no longer segfault when the left operand is not
+overloaded.
 
 =item *
 
-A regular expression match with an overloaded object on the right-hand side
-would in some cases stringify the object too many times.
+Assigning C<__PACKAGE__> or any other shared hash key scalar to a stash
+element no longer causes a double free.  Regardless of this change, the
+results of such assignments are still undefined.
 
 =item *
 
-The C-level C<pregcomp> function could become confused as to whether the
-pattern was in UTF8 if the pattern was an overloaded, tied, or otherwise
-magical scalar [perl #101940].
+Creating a C<UNIVERSAL::AUTOLOAD> sub no longer stops C<%+>, C<%-> and
+C<%!> from working some of the time [perl #105024].
 
 =item *
 
-A regression has been fixed that was introduced in 5.14, in C</i>
-regular expression matching, in which a match improperly fails if the
-pattern is in UTF-8, the target string is not, and a Latin-1 character
-precedes a character in the string that should match the pattern.  [perl
-#101710]
+Assigning C<__PACKAGE__> or another shared hash key string to a variable no
+longer stops that variable from being tied if it happens to be a PVMG or
+PVLV internally.
 
 =back
 
@@ -559,7 +737,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.15.4..HEAD
+  perl Porting/acknowledgements.pl v5.15.5..HEAD
 
 =head1 Reporting Bugs