Giter VIP home page Giter VIP logo

exporter-tidy's Introduction

Exporter::Tidy

INSTALLATION

To install this module type the following:

   perl Makefile.PL
   make
   make test
   make install

Or use CPANPLUS to automate the process.

Module documentation:
NAME
    Exporter::Tidy - Another way of exporting symbols

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
    This module serves as an easy, clean alternative to Exporter. Unlike
    Exporter, it is not subclassed, but it simply exports a custom import()
    into your namespace.

    With Exporter::Tidy, you don't need to use any package global in your
    module. Even the subs you export can be lexically scoped.

  use Exporter::Tidy LIST
    The list supplied to "use Exporter::Tidy" should be a key-value list.
    Each key serves as a tag, used to group exportable symbols. The values
    in this key-value list should be array references. There are a few
    special tags:

    all       If you don't provide an "all" tag yourself, Tidy::Exporter
              will generate one for you. It will contain all exportable
              symbols.

    default   The "default" tag will be used if the user supplies no list to
              the "use" statement.

    _map      With _map you should not use an array reference, but a hash
              reference. Here, you can rewrite symbols to other names or
              even define one on the spot by using a reference. You can "foo
              => 'bar'" to export "bar" if "foo" is requested.

  Exportable symbols
    Every symbol specified in a tag's array, or used as a key in _map's hash
    is exportable.

  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.

  Importing from a module that uses Exporter::Tidy
    You can use either a symbol name (without the sigil if it is a sub, or
    with the appropriate sigil if it is not), or a tag name prefixed with a
    colon. It is possible to import a symbol twice, but a symbol is never
    exported twice under the same name, so you can use tags that overlap. If
    you supply any list to the "use" statement, ":default" is no longer used
    if not specified explicitly.

    To avoid name clashes, it is possible to have symbols prefixed. Supply
    "_prefix" followed by the prefix that you want. Multiple can be used.

        use Some::Module qw(foo bar), _prefix => 'some_', qw(quux);

    imports Some::Module::foo as foo, Some::Module::bar as bar, and
    Some::Module::quux as some_quux. See the SYNOPSIS for more examples.

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.

  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 is 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.

  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.

LICENSE
    Pick your favourite OSI approved license :)

    http://www.opensource.org/licenses/alphabetical

AUTHOR
    Juerd Waalboer <[email protected]> <http://juerd.nl/>

exporter-tidy's People

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.