From: Dave Mitchell Date: Mon, 6 May 2002 17:17:00 +0000 (+0100) Subject: Re: [proposed PATCH] correctly unlocalise exists on tied/%ENV X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=159ad9158da627b6008687c4cd6aaaa0f0c7d16f;p=p5sagit%2Fp5-mst-13.2.git Re: [proposed PATCH] correctly unlocalise exists on tied/%ENV Message-ID: <20020506171700.A256@fdgroup.com> p4raw-id: //depot/perl@16434 --- diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 920d74e..2a32e93 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -544,8 +544,8 @@ errors so consider starting laundering now. =item * -Tied hash interfaces are now required to have the EXISTS method -(either own or inherited). +Tied hash interfaces are now required to have the EXISTS and DELETE +methods (either own or inherited). =item * @@ -1946,8 +1946,8 @@ Localised tied variables no more leak memory =item * -Localised hash elements are correctly unlocalised to not to exist, -if that's what they where. +Localised hash elements (and %ENV) are correctly unlocalised to not to +exist, if that's what they where. use Tie::Hash; @@ -1963,7 +1963,7 @@ if that's what they where. # but no more so. As a side effect of this fix, tied hash interfaces B define -the EXISTS method. +the EXISTS and DELETE methods. =item * diff --git a/t/op/local.t b/t/op/local.t index d23b200..6da0391 100755 --- a/t/op/local.t +++ b/t/op/local.t @@ -1,6 +1,6 @@ #!./perl -print "1..71\n"; +print "1..75\n"; sub foo { local($a, $b) = @_; @@ -142,6 +142,8 @@ tie %h, 'TH'; { local($h{'a'}) = 'foo'; local($h{'b'}) = $h{'b'}; + local($h{'y'}); + local($h{'z'}) = 33; print +($h{'a'} eq 'foo') ? "" : "not ", "ok 42\n"; print +($h{'b'} == 2) ? "" : "not ", "ok 43\n"; local($h{'c'}); @@ -183,6 +185,8 @@ $ENV{_X_} = 'a'; $ENV{_Y_} = 'b'; $ENV{_Z_} = 'c'; { + local($ENV{_A_}); + local($ENV{_B_}) = 'foo'; local($ENV{_X_}) = 'foo'; local($ENV{_Y_}) = $ENV{_Y_}; print +($ENV{_X_} eq 'foo') ? "" : "not ", "ok 54\n"; @@ -244,3 +248,12 @@ while (/(o.+?),/gc) { print "not " if exists $x{c}; print "ok 71\n"; } + +# these tests should be physically located after tests 46 and 58, +# but are here instead to avoid renumbering everything. + +# local() should preserve the existenceness of tied hashes and %ENV +print "not " if exists $h{'y'}; print "ok 72\n"; +print "not " if exists $h{'z'}; print "ok 73\n"; +print "not " if exists $ENV{_A_}; print "ok 74\n"; +print "not " if exists $ENV{_B_}; print "ok 75\n";