BillKSmith has asked for the
wisdom of the Perl Monks concerning the following question:

I am reading the book "Intermediate Perl" and I am having trouble with the section call marshalling Data (page 78). The idea is to save a data structure with Data::Dumper->Dump and later recover that data structure in another program by executing the saved string with eval.

The example in the book creates two hashes that reference each other. It then dumps both of them to a string. My code below produces the exact string that the book says to expect. For the sake of demonstrating my problem, I create a second package (Other) and attemp to reconstruct the hashes from the string in that package. The resulting hashes contain the right data, but they do not reference each other. I demonstrate this by showing that two references which should be equal are equal in the main package, but not in the Other package.

Why in earth would Other want to unmarshall some variables without knowing what they're called? If it didn't know what they were called, it couldn't very well make practical use of the data contained in them.

Notice the difference.
Next, you've used warnings -- this is great, since many people tend to forget that -- but you should also try strict. Many other problems are quickly found that way.
Also, you don't print to file handles like you did. Rather, it goes more like:

Actually, both of the uses of braces are valid alternatives (one only for moderately modern versions of Perl) to the methods you proposed. You can write "package main; ..." or "package main { ... }" (as of some non-ancient Perl version) and you can do "print $FH ..." or "print {$FH} ..." (since at least Perl 3).

Package Blocks were introduced in perl 5.12. They have the advantage of limiting the scope of lexical variables to the package. I did not use strict in this example because the the concept that I am trying to learn makes changes to the symbol table. The hashes and the the string $marshalling_data must be global variables. Explicitly specifing all the exceptions to strict would mask my intention.