eq in Perl is not like eq
in lisp, nor is it like equal.
It's more like (Perl's) ==, except that
it compares strings instead of numbers. What
you're doing is evaluating the two hashes in
string context and comparing the results.
Hashes in string context (or any scalar context)
return a piece of technical information you don't
care about, so this isn't what you want to do.
Perl5 doesn't have a built-in operator for what you
do want, so you can either write your own hash
comparison routine or (preferably) look into using
the module that the other monks have suggested.
(I believe Perl6 will be fixing this, but you don't
want to wait for that, because it'll be a while.)
;$;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}}
split//,".rekcah lreP rehtona tsuJ";$\=$;[-1]->();print