Copying byte by byte is not a good idea. Imagine the PCI-bus working just as much on one byte as 65k bytes ;) (Depends on OS, PCI, etc)
I'm not sure how relevant it is in this particulare case, but you can preallocate hashes with "keys(%HASH) = 100;".
If you really have to work with one byte at a time, you should atleast consider reserving the memory you'll be using and writing directly to a memory address;
Maybe embed some C/C++ code to do that particiular task.