The differences are many and often subtle:
- use only expects a bareword, require can take a bareword or an expression
- use is evaluated at compile-time, require at run-time
- use implicitly calls the import method of the module being loaded, require does not
- use excepts arguments in addition to the bareword (to be passed to import), require does not
- use does not behave like a function (i.e can't be called with parens, can't be used in an expression, etc), whereas require does
So they
behave differently but achieve the same goal. Then there's a list of cultural differences in addition to the technical differences, but they're not so hard and fast.