> I tested following code. [...] > nil > {"a"=>1, "a"=>10, "b"=>2} > 10 > {"a"=>20, "a"=>10, "b"=>2} > Is this BUG or feature? This is called a compromise. setting $= to true changes the hash code calculation so that "foo"'s hashcode will actually be the usual "FOO" hashcode. this means, although keys are stored in their original form, all hash codes are computed after a conversion to uppercase. this is why a key containing lowercase cannot be found after turning $= on, although it exists. this is also why non-unique keys are, strangely enough, allowed. It would not be practical to recalculate all hash codes and rearrange all key/value pairs in memory every time you flip the switch. as a ruby newbie, i am impressed $= doesn't break the rest of the interpreter. the bottom line: if you are to *ever* use $=, do it at the very beginning of the program, or don't do it. my guess for $= is that it's going to become deprecated in Ruby version 2 or 3; it's one of that kind of features. Mathieu Bouchard