What you are seeing is the normal string representation of a regular expression.
Since you want to load it back as a regular expression, a better way to meet your goal would be to dump the generated hash to a YAML string using YAML::Dump and store that string in a file. Then when you want to use the hash, retrieve the file contents in a string and pass it to YAML::Load - the hash will be restored exactly in the same state that you dumped it. YAML can handle dumping and reloading of regular expressions, hashes, blessed objects, network graphs, circular references and much more. By using YAML (rather than Storable which is binary), the dump file will also be portable across machines and human readable so you can eyeball it for a sanity check - see YAML.
However, I have to ask - why are you dumping this hash to a file rather than generating it on the fly when you need it and passing it to a subroutine when it comes time to apply to to some data?