NAME
    perl5 - Use a Bunch of Modules in One Go

SYNOPSIS
    Use a version of Perl and its feature set:

        use perl5;      # Same as 'use perl5 v5.10.0;'
        use perl5 v14.1;
        use perl5 14.1;
        use perl5-14.1;

    Use a bundled feature set from a "perl5" plugin:

        use perl5-i;
        use perl5-2i;
        use perl5-ingy;
        use perl5-yourShinyPlugin;

    Or both:

        use perl5 v14.1 -shiny;

DESCRIPTION
    The "perl5" module lets you "use" a well known set of modules in one
    command.

    It allows people to create plugins like "perl5::foo" and "perl5::bar"
    that are sets of useful modules that have been tested together and are
    known to create joy.

    This module, "perl5", is generally the base class to such a plugin.

USAGE
    This:

        use perl5-foo;

    Is equivalent in Perl to:

        use perl5 '-foo';

    The "perl5" module takes the first argument in the "use" command, and
    uses it to find a plugin, like "perl5::foo" in this case.

    "perl5::foo" is typically just a subclass of perl5::base. It invoke a
    set of modules for its caller.

    If you use "perl5" with no arguments, like this:

        use perl5;

    It is the same as saying:

        use 5.010;
        use strict;
        use warnings;

    If you use it with a version, like this:

        use perl5 v14;

    It is the same as saying:

        use v5.14;
        use strict;
        use warnings;
        use feature ':5.14';

API
    To create a plugin called "perl5::foo" that gets called like this:

        use perl5-foo;

    Write some code like this:

        package perl5::foo;
        use base 'perl5';
        our $VERSION = 0.12;

        # These is the list of modules (with optional version and arguments)
        sub imports {
            return (
                strict =>
                warnings =>
                features => [':5.10'],
                SomeModule => 0.22,
                OtherModule => 0.33, [option1 => 2],
                Module => [],   # Don't invoke Module's import() method
            );
        }

        1;

INSPIRATION
    This module was inspired by Michael Schwern's perl5i, and the talk he
    gave about it at the 2010 OSDC in Melbourne. By "inspired" I mean that I
    was perturbed by Schwern's non-TMTOWTDI attitude towards choosing a
    standard set of Perl modules for all of us.

        THIS IS PERL! THERE ARE NO STANDARDS!

    ...and I told him so. I also promised that I would show him my feelings
    in code. Schwern, *this* is how I feel! See also perl5::i.

    DISCLAIMER: Mr Schwern has my full love and respect, and knows it well.
    :)

THANKS
    Special thanks to mst, audreyt and obra for ideas and support.

SEE ALSO
    *   perl5i

    *   perl5::i

    *   perl5::ingy

AUTHOR
    Ingy döt Net <ingy@ingy.net>

COPYRIGHT AND LICENSE
    Copyright (c) 2011. Ingy döt Net.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

    See http://www.perl.com/perl/misc/Artistic.html

