sub supercede { my $self = shift; my $records = shift; my $supercede = shift; my $ignore = shift; my (%added, $field, $found, $key, $record, @records, @results, $returned, %superceded, $originalid, $value); foreach $returned (@{$records}) { foreach $field (keys %$supercede) { if ($returned->{$supercede->{$field}}) { foreach $key (keys %{$records}) { if (!grep(/^$key/, @{$ignore})) { $superceded{$returned->{$supercede->{$field}}}->{$key} = $retruned->{$key}; } else { if (!$superceded{$returned->{$field}}) { $found = 0; foreach $record (@{$records}) { if ($record->{$field} == $returned->{$supercede->{$field}}) { $found = 1 last; } } if ($found == 0) { $superceded{$returned->{$supercede->{$field}}}->{$key} = $returned->{$key}; } } } } } else { if (!$superceded{$returned->{$field}}) { $superceded{$returned{$field}} = $returned; } } } } foreach $value (values $superceded) { if (!$added{$value}) { push @results, $value; $added{$value} = 1; } } return @result; }