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::Basenamemodule - Hence, every module must provide an
importfunction - When writing an own module, the easiest way to do this is to import such an
importfunction:use Exporter qw(import); - This import function looks at the
@EXPORT_OKarray o the module and allows the called of the module to import all the functions listed therein
Package vs. Module
- Module:
- A
.pmfile under one of the directories in@INC - Used in the
usestatement - Example:
use File::Basename;looks for a fileBasename.pmin directoryFilein one of the directories in@INC
- A
- Package:
- A package declaration within a module (
.pmfile) - 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