1: sub supercede { 2: 3: my $self = shift; 4: my $records = shift; 5: my $supercede = shift; 6: my $ignore = shift; 7: 8: my (%added, $field, $found, $key, $record, @records, @results, $returned, %superceded, $originalid, $value); 9: 10: foreach $returned (@{$records}) { 11: foreach $field (keys %$supercede) { 12: if ($returned->{$supercede->{$field}}) { 13: foreach $key (keys %{$records}) { 14: if (!grep(/^$key/, @{$ignore})) { 15: $superceded{$returned->{$supercede->{$field}}}->{$key} = $retruned->{$key}; 16: } else { 17: if (!$superceded{$returned->{$field}}) { 18: $found = 0; 19: foreach $record (@{$records}) { 20: if ($record->{$field} == $returned->{$supercede->{$field}}) { 21: $found = 1 22: last; 23: } 24: } 25: 26: if ($found == 0) { 27: $superceded{$returned->{$supercede->{$field}}}->{$key} = $returned->{$key}; 28: } 29: } 30: } 31: } 32: } else { 33: if (!$superceded{$returned->{$field}}) { 34: $superceded{$returned{$field}} = $returned; 35: } 36: } 37: } 38: } 39: 40: foreach $value (values $superceded) { 41: if (!$added{$value}) { 42: push @results, $value; 43: $added{$value} = 1; 44: } 45: } 46: 47: return @result; 48:}