Framework module for bundling Perl5 modules
Perl
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
lib
test
.travis.yml
Changes
Contributing
Makefile
Meta
ReadMe.pod

ReadMe.pod

NAME

perl5 - Use a Perl 5 group of modules/features

perl5-pm perl5-pm

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