From: David Mitchell Date: Mon, 7 Jun 2010 21:11:42 +0000 (+0100) Subject: Revert "make 'local $tied' untied" X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=89adf4e8e0de17fedf78328b32920f47635850d0;p=p5sagit%2Fp5-mst-13.2.git Revert "make 'local $tied' untied" 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 --- diff --git a/mg.c b/mg.c index 7027605..052fee5 100644 --- 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; diff --git a/t/op/local.t b/t/op/local.t index fababb7..f664df4 100644 --- a/t/op/local.t +++ b/t/op/local.t @@ -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 *@;