diff options
author | Father Chrysostomos <sprout@cpan.org> | 2011-11-18 16:17:22 -0800 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-11-18 17:46:22 -0800 |
commit | f1f99dc1f9e949ceafeeaead7b5f43b1aab8224d (patch) | |
tree | fde3661f64ce0fa8770460a2fcdc3a0856193da9 | |
parent | 9710ad417eae30e33b2583df714e850505d81f47 (diff) | |
download | perl-f1f99dc1f9e949ceafeeaead7b5f43b1aab8224d.tar.gz |
Copy magic during localisation even for GVs
The magic-copying is skipped for GVs. This logic goes back to perl
5.000 (patch a0d0e21e). I think it has always been wrong.
-rw-r--r-- | scope.c | 2 | ||||
-rw-r--r-- | t/op/tie.t | 16 |
2 files changed, 17 insertions, 1 deletions
@@ -181,7 +181,7 @@ S_save_scalar_at(pTHX_ SV **sptr, const U32 flags) osv = *sptr; sv = (flags & SAVEf_KEEPOLDELEM) ? osv : (*sptr = newSV(0)); - if (SvTYPE(osv) >= SVt_PVMG && SvMAGIC(osv) && SvTYPE(osv) != SVt_PVGV) { + if (SvTYPE(osv) >= SVt_PVMG && SvMAGIC(osv)) { if (SvGMAGICAL(osv)) { SvFLAGS(osv) |= (SvFLAGS(osv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; diff --git a/t/op/tie.t b/t/op/tie.t index 2431271651..b6567fc282 100644 --- a/t/op/tie.t +++ b/t/op/tie.t @@ -1164,3 +1164,19 @@ HASH HASH ARRAY ARRAY +######## + +# Localising a tied variable with a typeglob in it should copy magic +sub TIESCALAR{bless[]} +sub FETCH{warn "fetching\n"; *foo} +sub STORE{} +tie $x, ""; +local $x; +warn "before"; +"$x"; +warn "after"; +EXPECT +fetching +before at - line 8. +fetching +after at - line 10. |