If you add empty parentheses, then I think (and cannot test right now to confirm) the effect is that you will probably not import any of the functions that the POSIX module usually exports. That isn't very useful.

Everything is exported by default (with a handful of exceptions). This is an unfortunate backwards compatibility feature and its use is strongly discouraged. You should either prevent the exporting (by saying use POSIX (); , as usual) and then use fully qualified names (e.g. POSIX::SEEK_END ), or give an explicit import list. If you do neither and opt for the default (as in use POSIX; ), you will import hundreds and hundreds of symbols into your namespace.

I recall that in some of your prior questions you said that you installed your modules (even some of the core modules) by simply copying them to your private lib directory instead of using the normal install process.

Did you do that with the POSIX module? If so, that would explain why you're having this problem.