in reply to Re: use enlightenment
in thread use enlightenment

I don't agree that exporting is always preferable to using symbols with prepended package names. If you export a symbol you are simply creating an alias in the importing module's symbol table. Once you do, you have the possibility of colliding with a symbol exported from another module. Fully-qualified names also tell you where a function comes from, which allows the human reader to look it up more easily. It's a tradeoff for typing convenience.

Exports aren't automatically visible across modules, either. To take the OP's example:

package Foo; use strict; use base 'Exporter'; @Foo::EXPORT_OK = qw(foo); sub foo { print "Foo\n"; } 1; package Bar; use strict; use Foo qw(foo); sub bar { foo(); print "Bar\n"; } 1; package Something; use strict; use Bar; # This call will fail. foo();