The biggest expense is going to be if you have a very large @INC that you're searching across. If files are located further down in @INC, such as if you're loading stuff you installed from CPAN, or if some of your @INC directories are on NFS mounts, those are going a much longer time to resolve than any import/export stuff you're dealing with.
As for import/export stuff, I have a policy in my CPAN modules to never import stuff into my namespace, preferring instead to do the following:
use Scalar::Util ();
if ( Scalar::Util::reftype( $thing ) eq 'HASH' ) {
# Do stuff here
}
This has a couple benefits (other than performance, which I wasn't thinking of) to my thinking:
- Almost everything of mine is OO. Perl's OO treats all subroutines in a given namespace as methods in that class. I want to keep my classes as clean as possible, particularly if I want to have an AUTOLOAD.
- External subroutines are immediately labelled as to where they come from for future maintainers. While some people aren't as thrilled by this, I have been stymied by automatic exports and where they came from.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?