How does this Perl grep work to determine the union of several hashes?

Posted by titaniumdecoy on Stack Overflow See other posts from Stack Overflow or by titaniumdecoy
Published on 2010-04-15T05:10:28Z Indexed on 2010/04/16 4:13 UTC
Read the original article Hit count: 261

Filed under:
|

I don't understand the last line of this function from Programming Perl 3e.

Here's how you might write a function that does a kind of set intersection by returning a list of keys occurring in all the hashes passed to it:

@common = inter( \%foo, \%bar, \%joe );
sub inter {
    my %seen;
    for my $href (@_) {
        while (my $k = each %$href) {
            $seen{$k}++;
        }
    }
    return grep { $seen{$_} == @_ } keys %seen;
}

I understand that %seen is a hash which maps each key to the number of times it was encountered in any of the hashes provided to the function.

© Stack Overflow or respective owner

Related posts about perl

Related posts about grep