My understanding of the problem: You have a ref to a HoH and you need to find all of the first set of keys that have a specific, but unspecified at coding time, second key or value.
For key I would do something like this my $key2 = func_to_get_key2(); for $key1 (grep { exists $store->{$key1}{$key2} } sort keys %$store) { process($store, $key1, $key2); } For value I would use a similar construct my ($key2, $value) = func_to_get_key2_and_value(); for $key1 (grep { $store->{$key1}{$key2} eq $value } sort keys %$store) { process($store, $key1, $key2); } N.B. eq is not a good test of equality for numbers (use == instead) and == is not a good test of equality for floating point numbers that are the result of even simple operations (use an inequaltiy with an appropriate delta* instead); hopefully objects will provide an overridden eq or == operator or will provide an explicit method for testing equality. * I may have butchered that, what I mean is something like ($value <= $target-$delta and $value <= $target+$delta) where $delta is a small value that is equal to the amount of rounding error you think may have crept in. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/