Issue #19739 has been updated by byroot (Jean Boussier).
That is very interesting.
The two strings are identical (aside from one being frozen):
```ruby
require "objspace"
hash = {}
key = "ABC OÜ"
p key.hash
key.slice!(/ oü$/i)
p key.hash
puts ObjectSpace.dump(key)
hash[key] = true
p "#{key} in #{hash}: value is #{hash[key].inspect}"
puts ObjectSpace.dump(hash.keys.first)
p [hash.keys.first, key, hash.keys.first == key]
p [hash.keys.first.hash, key.hash]
```
```
1883393806954673666
-2878200511277543492
{"address":"0x10129f048", "type":"STRING",
"class":"0x1011c2418", "embedded":true,
"bytesize":3, "encoding":"UTF-8", "memsize":40,
"flags":{"wb_protected":true}}
"ABC in {\"ABC\"=>true}: value is nil"
{"address":"0x10129ebc0", "type":"STRING",
"class":"0x1011c2418", "frozen":true,
"embedded":true, "fstring":true, "bytesize":3,
"value":"ABC", "encoding":"UTF-8",
"memsize":40, "flags":{"wb_protected":true}}
["ABC", "ABC", true]
[-2878200511277543491, -2878200511277543491]
```
The hash code is the same, and `==` returns true.
I had a quick look at recent changes in `String#slice!` that could explain why it's
fixed in 3.2, but didn't spot anything yet.
What is interesting though is that the first access to `key.hash` returns
`-2878200511277543492`, but then later it consistently returns `-2878200511277543491`. I
wonder if there is an off by one bug somewhere.
----------------------------------------
Bug #19739: Key cannot be found in a Hash when slice! method is applied to the key
https://bugs.ruby-lang.org/issues/19739#change-103610
* Author: ilya.andreyuk (Ilya Andreyuk)
* Status: Open
* Priority: Normal
* ruby -v: 3.1.4
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Hello,
Key cannot be found in a Hash when slice! method is applied to the key. I cannot reproduce
this behaviour with sub! or gsub! methods:
``` ruby
hash = {}
key = "ABC OÜ"
key.slice!(/ oü$/i)
# key.sub!(/ oü$/i, '')
# key.gsub!(/ oü$/i, '')
hash[key] = true
"#{key} in #{hash}: value is #{hash[key]}"
=> "ABC in {\"ABC\"=>true}: value is "
```
Also it seems that ruby 2.7.6 and 3.2.2 don't have this issue.
--
https://bugs.ruby-lang.org/