Sample Function-Oriented Interface: File::Basename
Selecting What to Import
Sample Object-Oriented Interface: File::Spec
A More Typical Object-Oriented Module: Math::BigInt
The Differences Between OO and Non-OO Modules
What use Is Doing
Setting the Path at the Right Time
Importing with Exporter
@EXPORT and @EXPORT_OK
Exporting in a Primarily OO Module
Custom Import Routines
Exercise
A module is a building block for your program: a set of related subroutines and variables packaged so it can be reused. This chapter looks at the basics of modules: how to bring in modules that others have written, and how to write modules of your own.
To understand what happens with use, look at one of the many modules included with a normal Perl distribution: File::Basename. This module parses file specifications into useful pieces in a mostly portable manner. The default usage:
use File::Basename;
introduces three subroutines, fileparse, basename, and dirname,[60] into the current package: typically, main in the main part of your program. From this point forward, within this package, you can say: [61]
[60]As well as a utility routine, fileparse_set_fstype.
[61]The new symbols are available for all code compiled in the current package from this point on, whether it's in this same file or not. However, these symbols won't be available in a different package.
my $basename = basename($some_full_path); my $dirname = dirname($some_full_path);
as if you had written the basename and dirname subroutines yourself, or (nearly) as if they were built-in Perl functions.[62]
[62]These routines pick out the filename and the directory parts of a pathname. For example, if $some_full_path were D:\Projects\Island Rescue\plan 7.rtf (presumably, the program is running on a Windows machine), the basename would be plan 7.rtf and the dirname would be D:\Projects\Island Rescue.
However, suppose you already had a dirname subroutine? You've now overwritten it with the definition provided by File::Basename! If you had turned on warnings, you'd see a message stating that, but otherwise, Perl really doesn't care.
Copyright © 2003 O'Reilly & Associates. All rights reserved.