There really isn't any reason to make separate hashes with the MAC addresses as the names. Since you seem to be only associating one MAC address with one IP address and one hostname, a better solution would be to use a hash of arrays. The hash keys could be the IP address (or whatever you want to look up by), and the array could be (MACaddress, hostname). You would then print the info like so:
for $key (%hash){
print "$key $hash{$key}->[0] $hash{$key}->[1]\n";
}
-caedes