Issue #11294 has been reported by Andrew Kozin.

----------------------------------------
Bug #11294: Possible bug in Object.const_get
https://bugs.ruby-lang.org/issues/11294

* Author: Andrew Kozin
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 2.2
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
~~~
module Foo; end
module Foo::Baz; end
module Bar; end
module Bar::Qux; end

Object.const_get "Foo::Baz::Bar::Qux"
# => Bar::Qux
~~~

Why on earth it is found at all?
It seems pretty weird to me.

The real problem arises later, when I add `Foo::Bar::Qux`:

~~~
module Foo::Bar; end
module Foo::Bar::Qux; end
~~~

then the tree becomes as following:

~~~
Foo::Bar::Qux
Foo::Baz
Bar::Qux
~~~

But the result remains the same:

~~~
Object.const_get "Foo::Baz::Bar::Qux"
# => Bar::Qux
~~~

Here I'd expect searching "Foo::Baz::Bar::Qux" to 

* either return nothing (this is less astonished, because there is no such constant),
* or find the closest `Bar::Qux` to `Foo::Bar`, that is `Foo::Bar::Qux`, not the `Bar::Qux`

I cannot even understand the logic that follows the `Object.const_get` in providing such a result.



-- 
https://bugs.ruby-lang.org/