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.