From dc456155af24d5c772439d33c322bd72cb0fcdfe Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sat, 26 Nov 2011 18:17:45 -0800 Subject: [PATCH] [perl #97980] Stop tied() from returning a copy Now tied() returns the actual scalar used to hold the tie object, so one can write weaken(tied $foo). --- pp_sys.c | 5 +---- t/op/tie.t | 8 ++++++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pp_sys.c b/pp_sys.c index cc8b099..78a51ae 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -973,10 +973,7 @@ PP(pp_tied) RETPUSHUNDEF; if ((mg = SvTIED_mg(sv, how))) { - SV *osv = SvTIED_obj(sv, mg); - if (osv == mg->mg_obj) - osv = sv_mortalcopy(osv); - PUSHs(osv); + PUSHs(SvTIED_obj(sv, mg)); RETURN; } RETPUSHUNDEF; diff --git a/t/op/tie.t b/t/op/tie.t index b6567fc..887fa96 100644 --- a/t/op/tie.t +++ b/t/op/tie.t @@ -1180,3 +1180,11 @@ fetching before at - line 8. fetching after at - line 10. +######## + +# tied returns same value as tie +sub TIESCALAR{bless[]} +$tyre = \tie $tied, ""; +print "ok\n" if \tied $tied == $tyre; +EXPECT +ok -- 2.7.4