Revert "make 'local $tied' untied"
David Mitchell [Mon, 7 Jun 2010 21:11:42 +0000 (22:11 +0100)]
This reverts commit 191ad7eff570fc96c93993e4358f83e2033365d6.

Some modules (e.g. File::chdir) relied on the current behaviour of
local $tied_scalar, so lets leave things as-is for now. See

http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2010-05/msg00627.html

mg.c
t/op/local.t

diff --git a/mg.c b/mg.c
index 7027605..052fee5 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -179,7 +179,6 @@ S_is_container_magic(const MAGIC *mg)
     case PERL_MAGIC_rhash:
     case PERL_MAGIC_symtab:
     case PERL_MAGIC_tied: /* treat as value, so 'local @tied' isn't tied */
-    case PERL_MAGIC_tiedscalar: /* so 'local $scalar' isn't tied */
        return 0;
     default:
        return 1;
index fababb7..f664df4 100644 (file)
@@ -5,7 +5,7 @@ BEGIN {
     @INC = qw(. ../lib);
     require './test.pl';
 }
-plan tests => 310;
+plan tests => 306;
 
 my $list_assignment_supported = 1;
 
@@ -781,33 +781,6 @@ like( runperl(stderr => 1,
                       'index(q(a), foo);' .
                       'local *g=${::}{foo};print q(ok);'), "ok", "[perl #52740]");
 
-# localising a tied scalar should give you an untied var
-{
-    package TS;
-    sub TIESCALAR { bless \my $self, shift }
-
-    my $s;
-    sub FETCH { $s .= ":F=${$_[0]}"; ${$_[0]} }
-    sub STORE { $s .= ":S($_[1])"; ${$_[0]} = $_[1]; }
-
-    package main;
-    tie $ts, 'TS';
-    $ts = 1;
-    {
-       $s .= ':L1';
-       local $ts;
-       $s .= ':L2';
-       is($ts, undef, 'local tied scalar initially undef');
-       $ts = 2;
-       is($ts, 2, 'local tied scalar now has a value');
-       $s .= ':E';
-    }
-    is($ts, 1, 'restored tied scalar has correct value');
-    $ts = 3;
-    is($s, ':S(1):L1:F=1:L2:E:F=1:S(3)',
-               "local tied scalar shouldn't call methods");
-}
-
 # Keep this test last, as it can SEGV
 {
     local *@;