type
TMap = specialize TFPGMap<TKey, TData>;
function ContentEquals(m,n : TMap): Boolean;
var
key: TKey;
data, data2: TData;
idx: integer;
begin
Result := False;
if m.count <> n.count then
Exit;
for idx := 0 to m.count-1 do
begin
key := m.keys[idx];
Result := n.TryGetData(key, data2);
if Result then
begin
data := m.data[idx];
Result := data2 = data;
end;
if not Result then
Exit;
end;
end;
begin
...
b := ContentEquals(m,n);
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;
}