Chapter 17. Exporter
In Chapter 2, we showed how to use modules, some of which pulled functions into the current namespace. Now we’re going to show how to get our own modules to do that.
What use Is Doing
So, what does use
do?
How does the import list come into action? Perl interprets
the use
list as a particular form of BEGIN
block wrapped around a require
and a method call. The following two operations are equivalent:
use
Island::Plotting::
Maps
qw( load_map scale_map draw_map )
;
BEGIN
{
require
Island::Plotting::
Maps
;
Island::Plotting::
Maps
−
>
import
(
qw( load_map scale_map draw_map )
);
}
First, the require
is a package-name require, rather than the string-expression
require
from Chapter 11. The colons are turned into the native
directory separator (such as / for
Unix-like systems), and the name is suffixed with .pm (for “perl module”). On a Unix-like system,
we end up with:
require
"Island/Plotting/Maps.pm"
;
Note
We can’t use the .pl (for
“perl library”) extension that we used earlier since use
won’t find it. It only uses the .pm
extension.
Recalling the operation of require
from earlier, this means Perl looks in the current value of @INC
, checks each directory in turn for a
subdirectory named Island
that contains
a subdirectory named Plotting
that
contains the file named Maps.pm
If Perl doesn’t find an appropriate file after looking at all of
@INC
, the program dies (which we can
trap with an eval
).
Otherwise, Perl reads and evaluates the first file it finds. As always
with require
, the ...
Get Intermediate Perl, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.