%ignore = map { $_ => 1 } @ignore;

@diff = map { $a{$_} ne $b{$_} }
        grep { !$ignore{$_} } keys %a;

@diff will end up with a list of key/value pairs of %a that are
different from %b, excluding those of %ignore.

note: this is untested.

Chris

On 7 Feb 2002, Chas Owens wrote:

> I have two hashes (%a and %b) that contain data for one person from two
> different systems and I want to compare these hashes to see if the
> systems are out of sync.  The catch is I know that some of the fields
> will always be different and I want to ignore those fields.  Below is my
> solution, does anyone have a better way of doing this? BTW: there are a
> lot of fields currently with more being added as time goes on and the
> number of fields I want to ignore will stay pretty much the same).
>
> <example>
> my @ignore = ("key1", "key2");
>
> KEYS: foreach my $key (keys %a) {
>       foreach my $ignore (@ignore) {
>               next KEYS if $key eq $ignore;
>       }
>       if ($a{$key} ne $b{$key}) {
>               print "$key is different ($a{$key}, $b{$key})\n";
>       }
> }
> </example>
>
> --
> Today is Pungenday the 38th day of Chaos in the YOLD 3168
> All Hail Discordia!
>
> Missle Address: 33:48:3.521N  84:23:34.786W
>
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to