http://www.perlmonks.org?node_id=14375

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Something of this nature:
if ((a value from %hash) eq "Superman"){ do something..; }

Replies are listed 'Best First'.
Re: How do I check to see if a value in a hash is equal to something?
by ZZamboni (Curate) on May 23, 2000 at 19:44 UTC
    One way would be by inverting the hash and looking things up by value, as described in perlman:perlfaq4 (see How do I look up a hash element by value?).

    Another way, of you are only interested in knowing if the value is in the hash, without knowing the key, could be:

    $is_in_hash=grep /^Superman$/,values(%hash);
    This is not particularly space efficient if the hash is large. See also the second solution suggested in the FAQ mentioned above.

    --ZZamboni

      It has been said:
      Another way, of you are only interested in knowing if the value is in the hash, without knowing the key, could be:
      $is_in_hash=grep /^Superman$/,values(%hash);
      This is not particularly space efficient if the hash is large. See also the second solution suggested in the FAQ mentioned above.
      Rather than using a regular expression, just use an ordinary expression:
      $is_in_hash = 0 < grep $_ eq "Superman", values %hash;

      -- Randal L. Schwartz, Perl hacker