From b20961491ccfb20bc7f9545285ddbacc783afb53 Mon Sep 17 00:00:00 2001 From: Bo Lindbergh Date: Mon, 28 May 2007 22:26:00 +0200 Subject: [PATCH] Re: localising hash element by variable Message-Id: p4raw-id: //depot/perl@31301 --- scope.c | 2 +- t/op/local.t | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/scope.c b/scope.c index 4b68f1b..964a3b9 100644 --- a/scope.c +++ b/scope.c @@ -545,7 +545,7 @@ Perl_save_helem(pTHX_ HV *hv, SV *key, SV **sptr) SvGETMAGIC(*sptr); SSCHECK(4); SSPUSHPTR(SvREFCNT_inc_simple(hv)); - SSPUSHPTR(SvREFCNT_inc_simple(key)); + SSPUSHPTR(newSVsv(key)); SSPUSHPTR(SvREFCNT_inc(*sptr)); SSPUSHINT(SAVEt_HELEM); save_scalar_at(sptr); diff --git a/t/op/local.t b/t/op/local.t index 5aea967..489f409 100755 --- a/t/op/local.t +++ b/t/op/local.t @@ -5,7 +5,7 @@ BEGIN { @INC = qw(. ../lib); require './test.pl'; } -plan tests => 114; +plan tests => 117; my $list_assignment_supported = 1; @@ -428,3 +428,18 @@ sub f { ok(0 == $[); } } +# when localising a hash element, the key should be copied, not referenced + +{ + my %h=('k1' => 111); + my $k='k1'; + { + local $h{$k}=222; + + is($h{'k1'},222); + $k='k2'; + } + ok(! exists($h{'k2'})); + is($h{'k1'},111); +} + -- 2.7.4