I don't know much about how Perl deals with this stuff, but what
you've done is made a copy of the pointer/reference.
Both variables are referencing the same memory/hash.
What you want to do is copy the hash, not copy the reference to it.
I /think/ this ought to work:
my %hash = %{$fileSize};
__CODE__
my $h1 = {a=>1,b=>2};
print join(", ", keys %{$h1}), "\n";
my $h2 = $h1; # References same object
$$h2{c} = 3;
print join(", ", keys %{$h1}), "\n";
%copy = %{$h1}; # Copy to a new has
$copy{d} = 4; # Doesn't affect the original object
print join(", ", keys %{$h1}), "\n";
print join(", ", keys %copy), "\n";
__OUTPUT__
a, b
c, a, b
c, a, b
c, a, b, d
__END__
You can then reference the new copy if you so desire.
my $refToCopy = \%copy;
On Thu, Mar 6, 2008 at 10:42 AM, Dermot <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I have a file with a few settings in, a hash of settings.
>
> EG:
>
> use strict;
> use warnings;
> our @EXPORT = qw($fileSize);
>
> our $fileSize = { a=> {name => 'small', size => 50}, b=>{name=> 'medium',
> size => 75,} c=>{name=> 'large', size => 100} };
>
> These settings are used by several different programs and I don't always
> want to apply all the settings. I thought I could do this:
>
> # Make a local copy of HoH
> my $ref = $fileSizes;
>
> # remove a hash via key c
> delete $ref->{'c'};
>
> Print the original structure
> print Dumper($fileSizes);
>
> When I do this I get the reference without the C hash! I'm sure this is by
> design, I'm sure there is a good reason for it but how keep a version
> private?
>
> Hope
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/