Tidy(3pm)
β¨ NAME β¨
Exporter::Tidy β literally another way of exporting symbols π
(this is the page for Tidy(3pm), from the User Contributed Perl Documentation, bestie)
πΈ SYNOPSIS πΈ
package MyModule::HTTP;
use Exporter::Tidy
default => [ qw(get) ],
other => [ qw(post head) ];
use MyModule::HTTP qw(:all);
use MyModule::HTTP qw(:default post);
use MyModule::HTTP qw(post);
use MyModule::HTTP _prefix => 'http_', qw(get post);
use MyModule::HTTP qw(get post), _prefix => 'http_', qw(head);
use MyModule::HTTP
_prefix => 'foo', qw(get post),
_prefix => 'bar', qw(get head);
package MyModule::Foo;
use Exporter::Tidy
default => [ qw($foo $bar quux) ],
_map => {
'$foo' => \$my_foo,
'$bar' => \$my_bar,
quux => sub { print "Hello, world!\n" }
};
package MyModule::Constants;
use Exporter::Tidy
default => [ qw(:all) ],
_map => {
FOO => sub () { 1 },
BAR => sub () { 2 },
OK => sub () { 1 },
FAILURE => sub () { 0 }
};
π¦ DESCRIPTION π¦
okay so this module is the easy, clean alternative to Exporter π. Unlike Exporter, it does not get subclassed β instead it just exports a custom import() straight into your namespace. iconic behavior, honestly.
And the best part? With Exporter::Tidy, you don't need to use any package global in your module. Not even one. Even the subs you export can be lexically scoped. no cap. π«Ά
π use Exporter::Tidy LIST
The list you hand to use Exporter::Tidy should be a key-value list, periodt. Each key is a tag, used to group your exportable symbols together. And the values in this key-value list should be array references. There are a few special tags you gotta know about:
allβ if you don't provide analltag yourself,Tidy::Exporterwill generate one for you β¨. It contains all the exportable symbols.defaultβ this tag gets used when the user supplies no list to theusestatement._mapβ for_mapyou should not use an array reference, bestie, use a hash reference. Here you can rewrite symbols to other names, or even define one on the spot by using a reference. You can dofoo => 'bar'to exportbariffoois requested π«.
π Exportable symbols
Every symbol that's specified in a tag's array β or used as a key in _map's hash β is exportable. that's it, that's the list.
π Symbol types
You can export subs, scalars, arrays, hashes and typeglobs π₯. Do not use an ampersand (&) for subs. All other types must have the proper sigil. (yes this matters, don't come for me.)
π§ Importing from a module that uses Exporter::Tidy
You can use either a symbol name (without the sigil if it's a sub, or with the appropriate sigil if it's not), or a tag name prefixed with a colon β¨.
It's possible to import a symbol twice, but a symbol is never exported twice under the same name β so you can totally use tags that overlap, no drama π«Ά. And if you supply any list to the use statement, :default is no longer used unless you specify it explicitly. she said what she said.
To avoid name clashes, it's possible to have symbols prefixed π
. Supply _prefix followed by the prefix that you want. Multiple can be used, go off:
use Some::Module qw(foo bar), _prefix => 'some_', qw(quux);
This imports Some::Module::foo as foo, Some::Module::bar as bar, and Some::Module::quux as some_quux β¨. See the SYNOPSIS for more examples, bestie.
π COMPARISON π
Exporter::Tidy "versus" Exporter
These numbers are valid for my Linux system with Perl 5.8.0. Your mileage may vary πΈ.
β‘ Speed
Exporting two symbols using no import list (@EXPORT and :default) is approximately 10% faster with Exporter. But if you use any tag explicitly, Exporter::Tidy is more than twice as fast (!) as Exporter. not me being shook π
π§ Memory usage
perl -le'require X; print((split " ", `cat /proc/$$/stat`)[22])'
No module 3022848
Exporter::Tidy 3067904
Exporter 3084288
Exporter::Heavy 3174400
Exporter loads Exporter::Heavy automatically when needed. It's needed to support exporter tags, amongst other things. Exporter::Tidy has all functionality built into one module π.
Both Exporter(::Heavy) and Exporter::Tidy delay loading Carp until it is needed. efficient queens π
.
π Usage
Exporter is subclassed and gets its information from package global variables like @EXPORT, @EXPORT_OK and %EXPORT_TAGS.
Exporter::Tidy exports an import method and gets its information from the use statement. that's the whole vibe β¨.
π LICENSE π
This software may be redistributed under the terms of the GPL, LGPL, modified BSD, or Artistic license, or any of the other OSI approved licenses listed at http://www.opensource.org/licenses/alphabetical. Distribution is allowed under all of these licenses, or any smaller subset of multiple or just one of these licenses π.
When using a packaged version, please refer to the package metadata to see under which license terms it was distributed. Alternatively, a distributor may choose to replace the LICENSE section of the documentation and/or include a LICENSE file to reflect the license(s) they chose to redistribute under.
π ACKNOWLEDGEMENTS π
Thanks to Aristotle Pagaltzis for suggesting the name Exporter::Tidy π«Ά. chef's kiss naming, fr fr.
π AUTHOR π
Juerd Waalboer <juerd@cpan.org> <http://juerd.nl/>
and that's the whole page, bestie π π©· this was Tidy(3pm) from the User Contributed Perl Documentation, perl v5.40.0, dated 2024-09-21. go forth and export slayfully π
β¨
π¦ where this page comes from
- ubuntu resolute: libexporter-tidy-perl 0.09-1 Β· other
- ubuntu stonking: libexporter-tidy-perl 0.09-1 Β· other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms