I love that solution. Here it is in the form of a sub. Pass a reference to the hash into the sub. A return value of true means all values are equal. A value of false means there are some not-equal values.
use strict;
use warnings;
my %goodhash = qw/one 1 two 1 three 1 four 1 five 1/;
my %badhash = qw/one 1 two 2 three 2 four 2 five 2/;
foreach my $testhash ( \%goodhash, \%badhash ) {
print SameVals( $testhash )
? "Good.\n"
: "Bad.\n";
}
sub SameVals {
return keys( %{ { reverse %{ $_[0] } } } ) <= 1;
}
Note that this adds a hashref dereference. That's the %{ $_[0] } part.