in reply to string as a HASH ref

Beacause this: keys %{$n} doesn't do what you think it does. This says 'list the keys in the hash which $n is a reference to', not 'list the keys in the hash of which $n is a string containing the name.'

You almost certainly don't want to use variables to specify variable names - use a hash instead. Put all (both) your hashes into another hash. Ie:

my %numbers = {fred1 => \%fred1, mary1 => \%mary1};

Try looking at perlref or this tutorial for examples of how to create and use complex data structures such as hashes of hashes.

Also, why not put use strict at the top of the program. If it's worth using (which it is) why not use it on the whole program?