CXC::Exporter::Util "CXC::Exporter::Util" provides *tag-centric* utilities for modules which export symbols. It doesn't provide exporting services; its sole purpose is to manipulate the data structures used by exporting modules which follow the API provided by Perl's core Exporter module (e.g. Exporter::Tiny). In particular, it treats %EXPORT_TAGS as the definitive source for information about exportable symbols and uses it to generate @EXPORT_OK and @EXPORT. Consolidation of symbol information in one place avoids errors of omission. Exporting Symbols At it simplest, the exporting module calls "install_EXPORTS" with a hash specifying tags and their symbols sets, e.g., package My::Exporter; use CXC::Exporter::Util; use parent 'Exporter'; # or your favorite compatible exporter install_EXPORTS( { fruit => [ 'tomato', 'apple' ], nut => [ 'almond', 'walnut' ], } ); sub tomato {...} sub apple {...} sub almond {...} sub walnut {...} An importing module could use this via use My::ExportingModule ':fruit'; # import tomato, apple use My::ExportingModule ':nut'; # import almond, walnut use My::ExportingModule ':all'; # import tomato, apple, # almond, walnut, For more complicated setups, %EXPORT_TAGS may be specified first: package My::ExportingModule; use CXC::Exporter::Util; use parent 'Exporter'; our %EXPORT_TAGS = ( tag => [ 'Symbol1', 'Symbol2' ] ); install_EXPORTS; "install_EXPORTS" may be called multiple times Exporting Constants "CXC::Exporter::Util" provides additional support for creating, organizing and installing constants via "install_CONSTANTS". Constants are created via Perl's constant pragma. "install_CONSTANTS" is passed sets of constants grouped by tags, e.g.: install_CONSTANTS( { DETECTORS => { ACIS => 'ACIS', HRC => 'HRC', }, AGGREGATES => { ALL => 'all', NONE => 'none', ANY => 'any', }, }); # A call to install_EXPORTS (with or without arguments) must follow # install_CONSTANTS; install_EXPORTS; This results in the definition of * the constant functions, i.e., ACIS HRC ALL NONE ANY returning their specified values, * functions enumerating the constants' values, i.e. DETECTORS -> ( 'ACIS', 'HRC' ) AGGGREGATES -> ( 'all', 'none', 'any' ) * functions enumerating the constants' names, i.e. DETECTORS_NAMES -> ( 'ACIS', 'HRC' ) AGGGREGATES_NAMES -> ( 'ALL', 'NONE', 'ANY' ) The enumerating functions are useful for generating enumerated types via e.g. Type::Tiny: Enum[ DETECTORS ] or iterating: say $_ for DETECTORS; "install_CONSTANTS" may be called multiple times. If the constants are used later in the module for other purposes, constant definition should be done in a BEGIN block: BEGIN { install_CONSTANTS( { CCD => {nCCDColumns => 1024, minCCDColumn => 0,}, } ); } install_CONSTANTS( { CCD => { maxCCDColumn => minCCDColumn + nCCDColumns - 1, } } ); install_EXPORTS; For more complex situations, the lower level "install_constant_tag" and "install_constant_func" routines may be useful. INSTALLATION This is a Perl module distribution. It should be installed with whichever tool you use to manage your installation of Perl, e.g. any of cpanm . cpan . cpanp -i . Consult http://www.cpan.org/modules/INSTALL.html for further instruction. Should you wish to install this module manually, the procedure is perl Build.PL ./Build ./Build test ./Build install COPYRIGHT AND LICENSE This software is Copyright (c) 2022 by Smithsonian Astrophysical Observatory. This is free software, licensed under: The GNU General Public License, Version 3, June 2007