http://qs1969.pair.com?node_id=871542


in reply to Re: Ignore Case when comparing Hash Keys
in thread Ignore Case when comparing Hash Keys

I cant convert the Hash Keys to lower case, because I want to display the Keys and Values Side by side in the output and I want to keep the original Case of the Keys. I was wondering if there is something like if ($a =~ /$search/i) kind of comparison that ignores the case and matches the keys. Also I want the hash to give me the value of the key

Replies are listed 'Best First'.
Re^3: Ignore Case when comparing Hash Keys
by roboticus (Chancellor) on Nov 15, 2010 at 19:06 UTC

    avoidcoder:

    I don't advise it, but you could do something like:

    %hash1 = ("John", 43, "Paul", 25, "Marie", 22); %hash2 = ("john", 43, "Paul", 25, "marie", 22); while (($KEY_2, $VALUE_2) = each %hash2){ if (grep { m/$KEY_2/i } keys %hash1) { print "$KEY_2 : Matched\n"; } else{ print "$KEY_2 : Did not match\n"; } }

    Note: Untested, you can keep all the bits when it breaks, etc.

    ...roboticus

      Robotics Thanks. This works in Key Comparison but how do i get the value of the corresponding Key in the if block? Thanks again.

        avidcoder:

        Basically the same way:

        %hash1 = ("John", 43, "Paul", 25, "Marie", 22); %hash2 = ("john", 43, "Paul", 25, "marie", 22); while (($KEY_2, $VALUE_2) = each %hash2){ my @matches = grep { m/$KEY_2/i } keys %hash1; if (@matches) { print "$KEY_2 : Matched ", join(", ", @matches), "\n"; } else{ print "$KEY_2 : Did not match\n"; } }

        ...roboticus

Re^3: Ignore Case when comparing Hash Keys
by moritz (Cardinal) on Nov 15, 2010 at 20:03 UTC
    I cant convert the Hash Keys to lower case, because I want to display the Keys and Values Side by side in the output and I want to keep the original Case of the Keys.

    Then use another hash that maps lower case key to the correctly cased key.

    Also note that the original hash with the correctly cased keys still exists, and stands at your disposal.