In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/2d961f6deff76f15f1e5c200d92c2ea6139bcdd2?hp=433d4b0fb3195bdf6cc90be8b502b4308c90d578>
- Log ----------------------------------------------------------------- commit 2d961f6deff76f15f1e5c200d92c2ea6139bcdd2 Author: David Mitchell <[email protected]> Date: Wed Apr 21 18:47:07 2010 +0100 follow up fix for fd69380d5d5b95ef16e2521cf4251b34ee0ce151 The original fix for tied elements losing magic had a bug that was masked by a bool casting issue. Once the casting was fixed, the bug surfaced: elements of @+ lost their values when returned from a sub. By removing the TEMP flag from the regdatum PVLV, we force it to be copied when returned. ----------------------------------------------------------------------- Summary of changes: av.c | 2 ++ t/op/magic.t | 2 +- 2 files changed, 3 insertions(+), 1 deletions(-) diff --git a/av.c b/av.c index fb853a6..94b5f2c 100644 --- a/av.c +++ b/av.c @@ -245,6 +245,8 @@ Perl_av_fetch(pTHX_ register AV *av, I32 key, I32 lval) sv = sv_newmortal(); sv_upgrade(sv, SVt_PVLV); mg_copy(MUTABLE_SV(av), sv, 0, key); + if (!tied_magic) /* for regdata, force leavesub to make copies */ + SvTEMP_off(sv); LvTYPE(sv) = 't'; LvTARG(sv) = sv; /* fake (SV**) */ return &(LvTARG(sv)); diff --git a/t/op/magic.t b/t/op/magic.t index bef4922..60d81ae 100644 --- a/t/op/magic.t +++ b/t/op/magic.t @@ -466,13 +466,13 @@ is "@+", "10 1 6 10"; # Test for bug [perl #27839] { - local $TODO = "fixing a casting issue revealed broken behaviour in this test"; my $x; sub f { "abc" =~ /(.)./; $x = "@+"; return @+; }; + "pqrstuvwxyz" =~ /..(....)../; # prime @+ etc in this scope my @y = f(); is $x, "@y", "return a magic array ($x) vs (@y)"; -- Perl5 Master Repository
