Exporter::Lite3pm
Lightweight exporting of functions and variables
Usage
package Foo;use Exporter::Lite;our @EXPORT = qw($This That); # default exportsour @EXPORT_OK = qw(@Left %Right); # optional exports
Then in code using the module:
use Foo;# $This and &That are imported here
You have to explicitly ask for optional exports:
use Foo qw/ @Left %Right /;
Overview
Exporter::Lite is an alternative to Exporter, intended to provide a lightweight subset of the most commonly-used functionality. It supports "import()", @EXPORT and @EXPORT_OK and not a whole lot else.
Exporter::Lite simply exports its import() function into your namespace. This might be called a "mix-in" or a "role".
When "Exporter::Lite" was written, if you wanted to use "Exporter" you had to write something like this:
use Exporter;our @ISA = qw/ Exporter /;
"Exporter::Lite" saved you from writing that second line. But since before 2010 you've been able to write:
use Exporter qw/ import /;
Which imports the "import" function into your namespace from "Exporter". As a result, I would recommend that you use "Exporter" now, as it's a core module (shipped with Perl).
To make sure you get a version of "Exporter" that supports the above usage, specify a minimum version when you "use" it:
use Exporter 5.57 qw/ import /;
Back to "Exporter::Lite"
Setting up a module to export its variables and functions is simple:
package My::Module;use Exporter::Lite;our @EXPORT = qw($Foo bar);
Functions and variables listed in the @EXPORT package variable are automatically exported if you use the module and don't explicitly list any imports. Now, when you "use My::Module", $Foo and "bar()" will show up.
Optional exports are listed in the @EXPORT_OK package variable:
package My::Module;use Exporter::Lite;our @EXPORT_OK = qw($Foo bar);
When My::Module is used, $Foo and "bar()" will not show up, unless you explicitly ask for them:
use My::Module qw($Foo bar);
Note that when you specify one or more functions or variables to import, then you must also explicitly list any of the default symbols you want to use. So if you have an exporting module:
package Games;our @EXPORT = qw/ pacman defender /;our @EXPORT_OK = qw/ galaga centipede /;
Then if you want to use both "pacman" and "galaga", then you'd write:
use Games qw/ pacman galaga /;
Methods
Export::Lite has one public method, import(), which is called automatically when your modules is use()'d.
In normal usage you don't have to worry about this at all.
import-
Some::Module->import;Some::Module->import(@symbols);Works just like
"Exporter::import()"excepting it only honors@Some::Module::EXPORTand@Some::Module::EXPORT_OK.The given
@symbolsare exported to the current package provided they are in@Some::Module::EXPORTor@Some::Module::EXPORT_OK. Otherwise an exception is thrown (ie. the program dies).If
@symbolsis not given, everything in@Some::Module::EXPORTis exported.
Diagnostics
- '"%s" is not exported by the %s module'
-
Attempted to import a symbol which is not in
@EXPORTor@EXPORT_OK.
- 'Can\'t export symbol: %s'
-
Attempted to import a symbol of an unknown type (ie. the leading $@% salad wasn't recognized).
Repository
<https://github.com/neilb/Exporter-Lite>
Releases
11 releases since Debian 3.1 (Sarge); the text changed 6 times.