sub hcmp_numeric {
my ($h, $g) = @_;
my $hc = keys %$h;
my $gc = keys %$g;
return 0 unless $hc == $gc;
return 0 unless $hc == grep { exists $g->{$_} } keys %$h;
die 'non-scalar value detected'
if 0 < grep { ref $h->{$_} or ref $g->{$_} } keys %$h;
return 0 unless $hc == grep { $h->{$_} == $g->{$_} } keys %$h;
return 1;
}