This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert "Revert "Make untie check the FAKE flag on globs""
authorFather Chrysostomos <sprout@cpan.org>
Fri, 13 May 2011 15:30:50 +0000 (08:30 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 11 Jun 2011 18:16:45 +0000 (11:16 -0700)
This reverts commit 84b9ac853508aaff52254b6cf2b95a2a6783ff00.

pp_sys.c
t/op/tie.t

index 31c6ea8..106a443 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -913,7 +913,7 @@ PP(pp_untie)
     const char how = (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV)
                ? PERL_MAGIC_tied : PERL_MAGIC_tiedscalar;
 
-    if (isGV_with_GP(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
+    if (isGV_with_GP(sv) && !SvFAKE(sv) && !(sv = MUTABLE_SV(GvIOp(sv))))
        RETPUSHYES;
 
     if ((mg = SvTIED_mg(sv, how))) {
index 0872bde..a4f969a 100644 (file)
@@ -1023,12 +1023,20 @@ main
 f
 ########
 
-# tie $glob_copy vs tie *$glob_copy
-sub TIESCALAR { print "TIESCALAR\n" }
-sub TIEHANDLE{ print "TIEHANDLE\n" }
+# (un)tie $glob_copy vs (un)tie *$glob_copy
+sub TIESCALAR { print "TIESCALAR\n"; bless [] }
+sub TIEHANDLE{ print "TIEHANDLE\n"; bless [] }
+sub FETCH { print "never called\n" }
 $f = *foo;
 tie *$f, "";
 tie $f, "";
+untie $f;
+print "ok 1\n" if !tied $f;
+() = $f; # should not call FETCH
+untie *$f;
+print "ok 2\n" if !tied *foo;
 EXPECT
 TIEHANDLE
 TIESCALAR
+ok 1
+ok 2