My habits are as follows:
- mostly needed modules that have exports: put the "use" at the top of the file, and if I'm un-lazy, list the exports explictily in a qw() list for documentation and safety.
- mostly needed OO modules (no exports): ditto, listing an "empty list" () for the import list.
- rarely needed OO modules: I put a require in the code path just before access, so that the module loaded lazily.
- rarely needed modules that have exports: this is the tough category. I either punt and put it at the top, or put a require in the code path and live with unimported names (full package spelled out). Or, I rely on autouse, but that can get tricky for prototypes.