in reply to Trouble with hashrefs

You're assigning just a reference (to the thawed content) to $hash, which goes out of scope at the end of the routine. In other words, the reference changes, but what it originally pointed to isn't changed.  Try

%$hash = %{ thaw($hash2) };

What you have is kind of like

#!/usr/bin/perl -l my $href1 = { foo => "OK" }; my $href2 = $href1; # $href1 and $href2 point to the same hash print $href2->{foo}; $href2->{foo} = "NOT OK"; # modify entry print $href2->{foo}; $href2 = { foo => "OK2" }; # $href2 now points to another new hash print $href2->{foo}; print $href1->{foo}; # $href1 still points to the old hash __END__ OK NOT OK OK2 NOT OK