From 9aa8b00892d81bb5e94565d3cb9841dd57b7b9cf Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Mon, 25 Oct 2010 10:52:42 -0700 Subject: [PATCH] [perl #77688] tie $scalar can tie a handle Make tie() distinguish between $scalar and *$scalar when $scalar holds a glob copy, by checking the FAKE flag. --- pp_sys.c | 2 +- t/op/tie.t | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pp_sys.c b/pp_sys.c index f47395b..7fa9f02 100644 --- a/pp_sys.c +++ b/pp_sys.c @@ -826,7 +826,7 @@ PP(pp_tie) break; case SVt_PVGV: case SVt_PVLV: - if (isGV_with_GP(varsv)) { + if (isGV_with_GP(varsv) && !SvFAKE(varsv)) { methname = "TIEHANDLE"; how = PERL_MAGIC_tiedscalar; /* For tied filehandles, we apply tiedscalar magic to the IO diff --git a/t/op/tie.t b/t/op/tie.t index a9fb89e..5acd9a9 100644 --- a/t/op/tie.t +++ b/t/op/tie.t @@ -953,3 +953,14 @@ print ref tied *$rin, "\n"; EXPECT main f +######## + +# tie $glob_copy vs tie *$glob_copy +sub TIESCALAR { print "TIESCALAR\n" } +sub TIEHANDLE{ print "TIEHANDLE\n" } +$f = *foo; +tie *$f, ""; +tie $f, ""; +EXPECT +TIEHANDLE +TIESCALAR -- 2.7.4