Const::Exporter - Declare constants for export.
version v1.2.3
Define a constants module:
package MyApp::Constants;
our $zoo => 1234;
use Const::Exporter
tag_a => [ # use MyApp::Constants /:tag_a/;
'foo' => 1, # exports "foo"
'$bar' => 2, # exports "$bar"
'@baz' => [qw/ a b c /], # exports "@baz"
'%bo' => { a => 1 }, # exports "%bo"
],
tag_b => [ # use MyApp::Constants /:tag_b/;
'foo', # exports "foo" (same as from ":tag_a")
'$zoo', # exports "$zoo" (as defined above)
];
# `use Const::Exporter` can be specified multiple times
use Const::Exporter
tag_b => [ # we can add symbols to ":tab_b"
'moo' => $bar, # exports "moo" (same value as "$bar")
],
enums => [
[qw/ goo gab gub /] => 0, # exports enumerated symbols, from 0..2
],
default => [qw/ foo $bar /]; # exported by default
and use that module:
package MyApp;
use MyApp::Constants qw/ $zoo :tag_a /;
...
You may also import a predefined hash of constants for exporting dynamically:
use Const::Exporter;
my %myconstants = (
'foo' => 1,
'$bar' => 2,
'@baz' => [qw/ a b c /],
'%bo' => { a => 1 },
);
# ... do stuff
Const::Exporter->import(
constants => [%myconstants], # define constants for exporting
default => [ keys %myconstants ], # export everything in %myconstants by default
);
This module allows you to declare constants that can be exported to other modules.
To declare constants, simply group then into export tags:
package MyApp::Constants;
use Const::Exporter
tag_a => [
'foo' => 1,
'bar' => 2,
],
tag_b => [
'baz' => 3,
'bar',
],
default => [
'foo',
];
Constants in the default
tag are exported by default (that is, they
are added to the @EXPORTS
array).
When a constant is already defined in a previous tag, then no value is
specified for it. (For example, bar
in tab_b
above.) If you do
give a value, Const::Exporter will assume it's another symbol.
Your module can include multiple calls to use Const::Exporter
, so
that you can reference constants in other expressions, e.g.
use Const::Exporter
tag => [
'$zero' => 0,
];
use Const::Exporter
tag => [
'$one' => 1 + $zero,
];
or even something more complex:
use Const::Exporter
http_ports => [
'HTTP' => 80,
'HTTP_ALT' => 8080,
'HTTPS' => 443,
];
use Const::Exporter
http_ports => [
'@HTTP_PORTS' => [ HTTP, HTTP_ALT, HTTPS ],
];
Constants can include traditional constant symbols, as well as scalars, arrays or hashes.
Constants can include values defined elsewhere in the code, e.g.
our $foo;
BEGIN {
$foo = calculate_value_for_constant();
}
use Const::Exporter
tag => [ '$foo' ];
Note that this will make the symbol read-only. You don't need to explicitly declare it as such.
Enumerated constants are also supported:
use Const::Exporter
tag => [
[qw/ foo bar baz /] => 1,
];
will define the symbols foo
(1), bar
(2) and baz
(3).
You can also specify a list of numbers, if you want to skip values:
use Const::Exporter
tag => [
[qw/ foo bar baz /] => [1, 4],
];
will define the symbols foo
(1), bar
(4) and baz
(5).
You can even specify string values:
use Const::Exporter
tag => [
[qw/ foo bar baz /] => [qw/ feh meh neh /],
];
however, this is equivalent to
use Const::Exporter
tag => [
'foo' => 'feh',
'bar' => 'meh',
'baz' => 'neh',
];
Objects are also supported,
use Const::Exporter
tag => [
'$foo' => Something->new( 123 ),
];
By default, all symbols are exportable (in @EXPORT_OK
.)
The :default
tag is the same as not specifying any exports.
The :all
tag exports all symbols.
This module requires Perl v5.10 or newer.
Pull requests to support older versions of Perl are welcome. See "SOURCE".
Const::Exporter is not intended for use with modules that also export functions.
There are workarounds that you can use, such as getting
Const::Exporter to export your functions, or munging @EXPORT
etc. separately, but these are not supported and changes in the
future my break our code.
The following code is a syntax error, at least with some versions of Perl:
use Const::Exporter
=head2 a
=cut
a => [ foo => 1 ],
=head2 b
=cut
b => [ bar => 2 ];
If you want to mix POD with your declarations, use multiple use lines, e.g.
=head2 a
=cut
use Const::Exporter
a => [ foo => 1 ];
=head2 b
=cut
use Const::Exporter
b => [ bar => 2 ];
This module requires Perl v5.10.1 or later.
Future releases may only support Perl versions released in the last ten years.
See Exporter for a discussion of export tags.
-
This module only allows you to declare function symbol constants, akin to the constant module, without tags.
-
This module only allows you to declare function symbol constants, akin to the constant module, although you can specify tags.
-
This module only allows you to declare function symbol constants, akin to the constant module by defining functions that are only called as needed. The interface is rather complex.
-
This module will export all constants declared in the package's namespace.
The development version is on github at https://github.com/robrwo/Const-Exporter and may be cloned from git://github.com/robrwo/Const-Exporter.git
Please report any bugs or feature requests on the bugtracker website https://github.com/robrwo/Const-Exporter/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
Robert Rothenberg [email protected]
- Slaven Rezić [email protected]
- B. Estrade [email protected]
This software is Copyright (c) 2014-2023 by Robert Rothenberg.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)