Your update comment based on
chromatic's comment is wrong.
chromatic's comment was right, but you misunderstood it.
It isn't that
require doesn't take a module name, in fact it can take a module name as an argument,
exactly like
use does. However it
only does that when presented with a bareword. If you don't have a bareword in your code, then the expression is interpreted as a filename.
This is explained in the documentation for
require. Look for the phrase, "If EXPR is a bareword".