Some information about Perl modules.
How To Make A Module “Importable” To Another Module
The second argument of a use
statement, e.g. use File::Basename qw(dirname);
is the argument for the automatically called import
function of the referenced module
- For example,
use File::Basename qw(dirname);
results in callingimport(qw(dirname))
of theFile::Basename
module - Hence, every module must provide an
import
function - When writing an own module, the easiest way to do this is to import such an
import
function:use Exporter qw(import);
- This import function looks at the
@EXPORT_OK
array o the module and allows the called of the module to import all the functions listed therein
Package vs. Module
- Module:
- A
.pm
file under one of the directories in@INC
- Used in the
use
statement - Example:
use File::Basename;
looks for a fileBasename.pm
in directoryFile
in one of the directories in@INC
- A
- Package:
- A package declaration within a module (
.pm
file) - There may be several package declarations in a module file
- The package names in a module may be different from the module name
- A package declaration within a module (
- Example:
- File
lib/Foo/Bar/Baz.pm
(assumelib/
is in@INC
) - The file may have a package declaration like
package Hello::World;
- To import this module:
use Foo::Bar::Baz;
- To call subroutines of this module:
Hello::World::some_subroutine();
;
- File
- However, in practice often the package name (declared with
package ...;
) is the same as the module name. In this case, the subroutines of the package can be called without the package prefix.
Notes
In a Perl script, __FILE__
is equivalent to $0
. However, in a module, __FILE__
is the file name of the module and $0
is the name of the script that called the module