Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/robrwo/const-exporter
Declare constants to export in a declarative manner
https://github.com/robrwo/const-exporter
constants perl-module
Last synced: 11 days ago
JSON representation
Declare constants to export in a declarative manner
- Host: GitHub
- URL: https://github.com/robrwo/const-exporter
- Owner: robrwo
- Created: 2014-02-21T23:56:28.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-06-11T10:01:53.000Z (over 1 year ago)
- Last Synced: 2024-10-11T21:56:26.779Z (about 1 month ago)
- Topics: constants, perl-module
- Language: Perl
- Size: 166 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: Changes
Awesome Lists containing this project
README
# NAME
Const::Exporter - Declare constants for export.
# VERSION
version v1.2.3
# SYNOPSIS
Define a constants module:
```perl
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:
```perl
package MyApp;use MyApp::Constants qw/ $zoo :tag_a /;
...
```## Dynamically Creating Constants
You may also import a predefined hash of constants for exporting dynamically:
```perl
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
);
```# DESCRIPTION
This module allows you to declare constants that can be exported to
other modules.To declare constants, simply group then into export tags:
```perl
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](https://metacpan.org/pod/Const%3A%3AExporter) 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.```perl
use Const::Exportertag => [
'$zero' => 0,
];use Const::Exporter
tag => [
'$one' => 1 + $zero,
];
```or even something more complex:
```perl
use Const::Exporterhttp_ports => [
'HTTP' => 80,
'HTTP_ALT' => 8080,
'HTTPS' => 443,
];use Const::Exporter
http_ports => [
'@HTTP_PORTS' => [ HTTP, HTTP_ALT, HTTPS ],
];
```Constants can include traditional [constant](https://metacpan.org/pod/constant) symbols, as well as
scalars, arrays or hashes.Constants can include values defined elsewhere in the code, e.g.
```perl
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:
```perl
use Const::Exportertag => [
[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:
```perl
use Const::Exportertag => [
[qw/ foo bar baz /] => [1, 4],
];
```will define the symbols `foo` (1), `bar` (4) and `baz` (5).
You can even specify string values:
```perl
use Const::Exportertag => [
[qw/ foo bar baz /] => [qw/ feh meh neh /],
];
```however, this is equivalent to
```perl
use Const::Exportertag => [
'foo' => 'feh',
'bar' => 'meh',
'baz' => 'neh',
];
```Objects are also supported,
```perl
use Const::Exportertag => [
'$foo' => Something->new( 123 ),
];
```## Export Tags
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.
# KNOWN ISSUES
## Support for older Perl versions
This module requires Perl v5.10 or newer.
Pull requests to support older versions of Perl are welcome. See
["SOURCE"](#source).## Exporting Functions
[Const::Exporter](https://metacpan.org/pod/Const%3A%3AExporter) is not intended for use with modules that also
export functions.There are workarounds that you can use, such as getting
[Const::Exporter](https://metacpan.org/pod/Const%3A%3AExporter) to export your functions, or munging `@EXPORT`
etc. separately, but these are not supported and changes in the
future my break our code.## Mixing POD with Tags
The following code is a syntax error, at least with some versions of
Perl:```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.```perl
=head2 a=cut
use Const::Exporter
a => [ foo => 1 ];=head2 b
=cut
use Const::Exporter
b => [ bar => 2 ];
```# SUPPORT FOR OLDER PERL VERSIONS
This module requires Perl v5.10.1 or later.
Future releases may only support Perl versions released in the last ten years.
# SEE ALSO
See [Exporter](https://metacpan.org/pod/Exporter) for a discussion of export tags.
## Similar Modules
- [Exporter::Constants](https://metacpan.org/pod/Exporter%3A%3AConstants)
This module only allows you to declare function symbol constants, akin
to the [constant](https://metacpan.org/pod/constant) module, without tags.- [Constant::Exporter](https://metacpan.org/pod/Constant%3A%3AExporter)
This module only allows you to declare function symbol constants, akin
to the [constant](https://metacpan.org/pod/constant) module, although you can specify tags.- [Constant::Export::Lazy](https://metacpan.org/pod/Constant%3A%3AExport%3A%3ALazy)
This module only allows you to declare function symbol constants, akin
to the [constant](https://metacpan.org/pod/constant) module by defining functions that are only called
as needed. The interface is rather complex.- [Const::Fast::Exporter](https://metacpan.org/pod/Const%3A%3AFast%3A%3AExporter)
This module will export all constants declared in the package's
namespace.# SOURCE
The development version is on github at [https://github.com/robrwo/Const-Exporter](https://github.com/robrwo/Const-Exporter)
and may be cloned from [git://github.com/robrwo/Const-Exporter.git](git://github.com/robrwo/Const-Exporter.git)# BUGS
Please report any bugs or feature requests on the bugtracker website
[https://github.com/robrwo/Const-Exporter/issues](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.# AUTHOR
Robert Rothenberg
# CONTRIBUTORS
- Slaven Rezić
- B. Estrade# COPYRIGHT AND LICENSE
This software is Copyright (c) 2014-2023 by Robert Rothenberg.
This is free software, licensed under:
```
The Artistic License 2.0 (GPL Compatible)
```