The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    perl5 - Use a Perl 5 group of modules/features

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-modern;
        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. It invokes a set of
    modules for its caller.

    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';

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

        use perl5;

    It is the same as saying:

        use perl5 v10;

PLUGIN API
    This module uses lexically-wrapped-goto-chaining-magic to correctly load
    a set of modules (including optional version requirements and import
    options) into the user's code. The API for specifying a perl5 plugin is
    very simple.

    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)

THANKS
    Special thanks to schwern, mstrout, audreyt, rodrigo and jesse for ideas
    and support.

AUTHOR
    Ingy döt Net <ingy@cpan.org>

COPYRIGHT
    Copyright 2011-2014. 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>