Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Curate your own repository of Perl modules
Perl Other
tag: release-0.040_…

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


Pinto - Curate a repository of Perl modules


version 0.040_003


See pinto-admin to create and manage a Pinto repository.

See pinto-server to open remote access to a Pinto repository.

See pinto-remote to interact with a remote Pinto repository.

See Pinto::Manual for more information about the Pinto tools.


Pinto is a suite of tools for creating and managing a CPAN-like repository of Perl archives. Pinto is inspired by CPAN::Mini, CPAN::Mini::Inject, and MyCPAN::App::DPAN, but adds a few interesting features:

  • Pinto supports several usage patterns

With Pinto, you can create a repository to mirror all the latest distributions from another repository. Or you can create a "sparse repository" with just your own private distributions. Or you can create a "project repository" that has all the distributions required for a particular project. Or you can combine any of the above in some way.

  • Pinto supports adding AND removing archives from the repository

Pinto gives you the power to precisely tune the contents of your repository. So you can be sure that your downstream clients get exactly the stack of dependencies that you want them to have.

  • Pinto can be integrated with your version control system

Pinto can automatically commit to your version control system whenever the contents of the repository changes. This gives you repeatable and identifiable snapshots of your dependencies, and a mechanism for rollback when things go wrong.

  • Pinto makes it easier to build several local repositories

Creating new Pinto repositories is easy, and each has its own configuration. So you can have different repositories for each department, or each project, or each version of perl, or each customer, or whatever you want.

  • Pinto can pull archives from multiple remote repositories

Pinto can mirror or import distributions from multiple sources, so you can create private (or public) networks of repositories that enable separate teams or individuals to collaborate and share distributions.

  • Pinto supports team development

Pinto is suitable for small to medium-sized development teams, where several developers might contribute new distributions at the same time. Pinto ensures that concurrent users don't step on each other.

  • Pinto has a robust command line interface.

The pinto-admin and pinto-remote command line tools have options to control every aspect of your Pinto repository. They are well documented and behave in the customary UNIX fashion.

  • Pinto can be extended.

You can extend Pinto by creating Pinto::Action subclasses to perform new operations on your repository, such as extracting documentation from a distribution, or grepping the source code of several distributions.

In some ways, Pinto is also similar to PAUSE. Both are capable of accepting distributions and constructing a directory structure and index that toolchain clients understand. But there are some important differences:

  • Pinto does not promise to index exactly like PAUSE does

Over the years, PAUSE has evolved complicated heuristics for dealing with all the different ways that Perl code is written and distributions are organized. Pinto is much less sophisticated, and only aspires to produce an index that is "good enough" for most applications.

  • Pinto does not understand author permissions

PAUSE has a system of assigning ownership and co-maintenance permission to individuals or groups. But Pinto only has a basic "first-come" system of ownership. The ownership controls are only advisory and can easily be bypassed (see next item below).

  • Pinto is not secure

PAUSE requires authors to authenticate themselves before they can upload or remove distributions. However, Pinto does not authenticate and permits users masquerade as anybody they want to be. This is actually intentional and designed to encourage collaboration among developers.


run( $action_name => %action_args )

Runs the Action with the given $action_name, passing the %action_args to its constructor. Returns a Pinto::Result.

add_logger( $obj )

Convenience method for installing additional endpoints for logging. The object must be an instance of a Log::Dispatch::Output subclass.


For now, the Pinto API is private and subject to radical change without notice. Any module documentation you see is purely for my own references. In the meantime, the command line utilities mentioned in the "SYNOPSIS" are your public user interface.



You can find documentation for this module with the perldoc command.

perldoc Pinto


The following websites have more information about this module, and may be of help to you. As always, in addition to those websites please use your favorite search engine to discover more resources.

  • Search CPAN

The default CPAN search engine, useful to view POD in HTML format.

  • CPAN Ratings

The CPAN Ratings is a website that allows community ratings and reviews of Perl modules.

  • CPAN Testers

The CPAN Testers is a network of smokers who run automated tests on uploaded CPAN distributions.

  • CPAN Testers Matrix

The CPAN Testers Matrix is a website that provides a visual overview of the test results for a distribution on various Perls/platforms.

  • CPAN Testers Dependencies

The CPAN Testers Dependencies is a website that shows a chart of the test results of all dependencies for a distribution.

Bugs / Feature Requests

Source Code

git clone git://


Jeffrey Ryan Thalhammer


This software is copyright (c) 2011 by Imaginative Software Systems.

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

Something went wrong with that request. Please try again.