in reply to Copying a hash to another hash problem

The use of the arrow operator in $framearray->{$frameno}{$drawerno} = $tempno; implies that $framearray is actually a reference to hash, and not a hash itself. You can fix this in two ways. Either dereference the $framearray ref when copying to the new hash...
%newhash = %{$framearray};
Or use an actual hash instead of a reference in your original assignment statements...
my %framearray; $framearray{$frameno}{$drawerno} = $tempno; %newhash = %framearray;
Also, you should be aware that there is another implied arrow operator between your two hash subscripts, meaning that last assignment statement could be rewritten as...
$framearray{$frameno}->{$drawerno} = $tempno;
This is unavoidable as multidimensional hashes are implemented as a hash of hash refs.
Hope this helps.
-Bird