In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/353075a07ebc959a3a5d83bf53b00f3d2664ed00?hp=362e81e7a6d19fc10323ebfc1fd94e7ca546fb64>
- Log ----------------------------------------------------------------- commit 353075a07ebc959a3a5d83bf53b00f3d2664ed00 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:53:35 2014 -0800 perldelta for 8915ba3d0 M pod/perldelta.pod commit d8fc35861442cef38933d61f3720e32dd16898bd Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:52:06 2014 -0800 perldelta for dc1230de M pod/perldelta.pod commit f5630681a4cb4d050ff32a7bd14d6458ca2d2f1f Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:50:25 2014 -0800 perldelta for referencing outer stale vars e52eb89 Avoid reifying GVs in rv2cv c5e6a3c Test reference to unavailable lexical variable M pod/perldelta.pod commit aa95859b3cbf926083cadfb92ec5b096d282ad94 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:46:06 2014 -0800 perldelta for 5a8cd187c67 M pod/perldelta.pod commit e5fbfbc138e9c40911618be99d66f85eb2a366a3 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:43:01 2014 -0800 perldelta for bae8cfc69 M pod/perldelta.pod commit 73e793fc64b8b2c2d5d5d414ba0bc0bc9f8e47d5 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:41:19 2014 -0800 perldelta for 6a8b6cf09 M pod/perldelta.pod commit 70cee83f8ef0805c348e12d97bbfb92f86d4c93b Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:37:25 2014 -0800 perldelta for OA_DANGEROUS additions 6575cde tied is OA_DANGEROUS d86b312 values and each are OA_DANGEROUS M pod/perldelta.pod commit 9e26817d2718fa3546cd8efc6212c698dfddaef0 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:34:44 2014 -0800 perldelta for OPpTARGET_MY bugs b454703 Fix $lex = $ref++ under use integer f595e19 Fix $lex = chomp $lex regression from 5.12 f9e9590 Call STORE on lexical $tied = vec/chr 8ec0525 Donât call STORE twice on setpgrp target M pod/perldelta.pod commit 1e461e1609d667b0f9b7f7ed2d4f4a211a91dc52 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:13:06 2014 -0800 perldelta for 710b427f0 M pod/perldelta.pod commit 80b0bb9141be18ccc5c41bda21dce75050eebc7b Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:11:47 2014 -0800 perldelta for #119815 / 12cea2fa65 M pod/perldelta.pod commit b450ee68c90f0b8c9f82f2582aa0347bca34b905 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 14:01:41 2014 -0800 perldelta for OPpTARGET_MY optimisations db09808 Allow OPpTARGET_MY optimisation for vec 6abbd37 Allow OPpTARGET_MY optimisation for x d8cdf57 Allow OPpTARGET_MY optimisation for split a1b22ab Extend OPpTARGET_MY optimisation to state var init M pod/perldelta.pod commit 167522052bf54d72296c14fb88291d4f06294bd4 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 13:46:57 2014 -0800 perldelta for #77452 / 8635e3c23 M pod/perldelta.pod commit ef7051baee4d1f45801a8aca528cb1cd84074c51 Author: Father Chrysostomos <[email protected]> Date: Sun Nov 16 13:16:32 2014 -0800 perldelta for 6a9665b0cf M pod/perldelta.pod ----------------------------------------------------------------------- Summary of changes: pod/perldelta.pod | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index a44767e..45d6dab 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -130,6 +130,31 @@ operator disappears. If the right-hand argument is a constant 0, the whole expressions is optimised to the empty list, so long as the left-hand argument is a simple scalar or constant. C<(foo())x0> is not optimised. +=item * + +C<substr> assignment is now optimised into 4-argument C<substr> at the end +of a subroutine (or as the argument to C<return>). Previously, this +optimisation only happened in void context. + +=item * + +Assignment to lexical variables is often optimised away. For instance, in +C<$lexical = chr $foo>, the C<chr> operator writes directly to the lexical +variable instead of returning a value that gets copied. This optimisation +has been extended to C<split>, C<x> and C<vec> on the right-hand side. It +has also been made to work with state variable initialization. + +=item * + +In "\L...", "\Q...", etc., the extra "stringify" op is now optimised away, +making these just as fast as C<lcfirst>, C<quotemeta>, etc. + +=item * + +Assignment to an empty list is now sometimes faster. In particular, it +never calls C<FETCH> on tied arguments on the right-hand side, whereas it +used to sometimes. + =back =head1 Modules and Pragmata @@ -163,6 +188,22 @@ L<B::Deparse> has been upgraded from version 1.29 to 1.30. It now deparses C<+sub : attr { ... }> correctly at the start of a statement. Without the initial C<+>, C<sub> would be a statement label. +C<BEGIN> blocks are now emitted in the right place most of the time, but +the change unfortunately introduced a regression, in that C<BEGIN> blocks +occurring just before the end of the enclosing block may appear below it +instead. So this change may need to be reverted if it cannot be fixed +before Perl 5.22. [perl #77452] + +B::Deparse no longer puts erroneous C<local> here and there, such as for +C<LIST = tr/a//d>. [perl #119815] + +=item * + +L<B::Op_private> has been upgraded from version 5.021005 to 5.021006. + +It now includes a hash named C<%ops_using>, list all op types that use a +particular private flag. + =item * L<DynaLoader> has been upgraded from version 1.27 to 1.28. @@ -268,6 +309,16 @@ L<Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".|perldiag/Can't do %s( L<Warning: unable to close filehandle %s properly: %s|perldiag/"Warning: unable to close filehandle %s properly: %s"> +=item * + +The following two warnings for C<tr///> used to be skipped if the +transliteration contained wide characters, but now they occur regardless of +whether there are wide characters or not: + +L<Useless use of E<sol>d modifier in transliteration operator|perldiag/"Useless use of /d modifier in transliteration operator"> + +L<Replacement list is longer than search list|perldiag/Replacement list is longer than search list> + =back =head2 Changes to Existing Diagnostics @@ -531,6 +582,32 @@ C<(...) x ...> in scalar context used to corrupt the stack if one operand were an object with "x" overloading, causing erratic behaviour. [perl #121827] +=item * + +Assignment to a lexical scalar is often optimised away (as mentioned under +L</Performance Enhancements>. Various bugs related to this optimisation +have been fixed. Certain operators on the right-hand side would sometimes +fail to assign the value at all or assign the wrong value, or would call +STORE twice or not at all on tied variables. The operators affected were +C<$foo++>, C<$foo-->, and C<-$foo> under C<use integer>, C<chomp>, C<chr> +and C<setpgrp>. + +=item * + +List assignments were sometimes buggy if the same scalar ended up on both +sides of the assignment due to used of C<tied>, C<values> or C<each>. The +result would be the wrong value getting assigned. + +=item * + +C<setpgrp($nonzero)> (with one argument) was accidentally changed in 5.16 +to mean C<setpgrp(0)>. This has been fixed. + +=item * + +C<__SUB__> could return the wrong value or even corrupt memory under the +debugger (the B<-d> switch) and in subs containing C<eval $string>. + =back =head1 Known Problems @@ -568,6 +645,15 @@ This bug was actually fixed in 5.21.5, but it was not until after that release that this bug, and the fact that it had been fixed, were discovered. +=item * + +If a named sub tries to access a scalar declared in an outer anonymous sub, +the variable is not available, so the named sub gets its own undefined +scalar. In 5.10, attempts to take a reference to the variable +(C<\$that_variable>) began returning a reference to a I<copy> of it +instead. This was accidentally fixed in 5.21.4, but the bug and its fix +were not noticed till now. + =back =head1 Obituary -- Perl5 Master Repository
