9 May 2009
Some notes on Perl’s use, require, import and *do. *Quick notes for me; not meant to be authoritative.
- use is done at ‘compile-time’ and require is done at ‘run-time’ (ie can conditionally load modules)
- require is the older method, but use uses require to do it’s work:
use Foo; # equivalent to: require Foo; Foo->import(); use Foo qw (foo bar); # equivalent to: require Foo; Foo->import(qw(foo bar)); use Foo(); # equivalent to: require Foo; # ie don't import anything, not even the default things
- a Library is a just a file of code; a Module has package Foo in it (and usually other stuff)
- use only works with modules, whereas require works with both modules and libraries. Corollary: use only works with module names (Foo), whereas require also works with paths (eg ~/lib/foo.pm)
- require Foo will check if Foo has already been loaded, whereas **do Foo **will unconditionally reload Foo
- better practice is to write modules rather than librarys, to prevent namespace pollution. A simple module:
package Foo; # minimal. Usually add things like: use base qw (Exporter); our @EXPORT = qw(qux slarken); # keep this list small - namespace pollution
- to use this module:
use lib '~/lib'; # add this to %INC use Foo; # loads module, imports symbols in @EXPORT Foo->bar(); # correct Foo::bar(); # works, but not for inherited methods qux(); # works, due to export bar(); # carks
Some links:
- netalive.org – Writing Serious Perl
- Randal L. Schwartz – Hey use guys! import this!
- perl.com – The Perl You Need To Know – Part 3
- hype-free – The difference between use and require in Perl
- perldoc – use
- Perl Cookbook – Packages, Libraries and Modules