You basically need to maintain a membership map as an index of values, the
reverse look up referred to below:
my $search = "red";
my %fruit = (
'apple' => ['red','green'],
'kiwi' => 'green',
'banana' => 'yellow',
);
my %idx_fruit = (
'red' => {'apple' => 1 },
'green' => {'apple' => 1, 'kiwi' => 1 },
'yellow' => {'banana' => 1},
);
Note:
%idx_fruit is a
hash, but contains members as hash
references. This is to provide natural semantics for managing the membership sets and accessing values (e.g.,
delete,
exists, etc). The value
=> 1 is meaningless, but might be useful for some additional meta data. You could even have them point to the reference of the member in
%fruit for maximized fun.