in reply to Given ref to hash value, retrieve the key

I can think of two ways to accomplish this. Either might be appropriate, depending upon what you want to do. The second method is probably cleaner if you can assemble the entire hash at once and do a single reversal on it.

#!/usr/bin/perl -w use strict; my %hash = qw( foo 1 bar 1 baz 1 ); my $ref = \$hash{bar}; my ($key) = grep { \$hash{$_} eq $ref } keys %hash; print "$key\n"; # or my %ref_hash = map { \$hash{$_}, $_ } keys %hash; print $ref_hash{$ref};

With either of these solutions, though, I suspect that you likely have a design issue. Can you step back and explain the larger problem? We can probably come up with a better way of accomplishing what you need.

Cheers,
Ovid

New address of my CGI Course.
Silence is Evil (feel free to copy and distribute widely - note copyright text)

Replies are listed 'Best First'.
Re: Given ref to hash value, retrieve the key
by Abigail-II (Bishop) on May 22, 2003 at 22:51 UTC
    The OP already pointed out that iterating over the hash was a solution, but also dismissed it for efficiency reasons. And rightly so.

    Abigail

      Thanks. I missed that. I idly wonder if a tied hash would be a wee bit faster, but it would still be an awful solution.

      Cheers,
      Ovid

      New address of my CGI Course.
      Silence is Evil (feel free to copy and distribute widely - note copyright text)