Hello bsherkhane,
As Anonymous Monk says, if this is a database question, then hashes aren’t needed.
However, if you do have two hashes and want to find their intersection, just remember that the keys of a hash are accessible as a list via the Perl built-in keys function. So you really want the intersection of two lists, and this is an FAQ: see perlfaq4#How-do-I-compute-the-difference-of-two-arrays?-How-do-I-compute-the-intersection-of-two-arrays?
Update: The logic is actually simpler with hashes: because each key can occur only once in a given hash, you only need to determine whether an entry corresponding to each key in the first hash exists in the second:
use strict; use warnings; use Data::Dump; my %hash1 = ( a => 1, b => 2, c => 3, ); my %hash2 = ( b => 4, e => 5, f => 6, c => 7, ); my %intersection; for my $key (keys %hash1) { $intersection{$key} = [ $hash1{$key}, $hash2{$key} ] if exists $hash2{$key}; } dd \%intersection;
Output:
18:00 >perl 1527_SoPW.pl { b => [2, 4], c => [3, 7] } 18:01 >
(Of course, you’ll have to decide what to do when the values differ. I’ve just included both values in an anonymous array.)
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: intersecting two hashes
by Athanasius
in thread intersecting two hashes
by bsherkhane
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |