|Welcome to the Monastery|
Sure, sometimes Data::Dumper or similar is enough...
It's for things like this that a just-a-dumper dumper is valuable. The last thing you want is for the dumper to arrive at arbitrary decisions about whether the substructure under key A is a duplicate of that under key D on one pass and vice versa on another, because that's the keys came out of the hash in different orders.
You'd probably have to apply a sort option to get comparible output from a hash anyway, but for this kind of thing you want to see what's there in detail, not an abbreviated reminder that this bit at the bottom is the same as that bit way back up near the top. Especially in heavily self-referencial structures.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.