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 (c) 2008-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>

