Anatomy of a perl project

Alessandro Dotti Contra <alessandro@hyboria.org>
Revision: 1.3 - last updated 20060622

This is one of the possible layouts for a Perl project built using MakeMaker.

Makefile.PL

This is the heart of the project. This Perl script will generate the GNU Makefile for the entire project.

MANIFEST

This is a list of files that are part of the project. This file must be kept updated with every single file (one per line) you wish to include in the project.

In can be generated automatically by typing:

  $ make manifest

all files in the current directory and subdirectories will be added to the MANIFEST. If you want to exclude something, you can create the MANIFEST.SKIP file and add the unwanted files there.

README

This file contains a brief description of the project; it's goals and the features provided. It should outline the requirements (additional modules for example) and report any meaningfull information your users must or might like to know before they install your software.

INSTALL

General installation instructions. The file should include a step by step guide to build and install the project from source, and should also report some instructions about the installation of the available binaries (if any).

COPYING

This is the license which the project is under.

Changes

This file logs of what have been added or changed in any file of the project.

NEWS

Some kind of release notes. This file should resume the changes between releases, with less details than the Changes file.

TODO

This is a list of planned features that will be, sooner or later, included in the project.

BUGS

The list of bugs. In the best case this file will be empty.

AUTHOR

The list, name and email, of any person who have made contributions to the projects. These includes code, of course, but also binaries, documentation and so on.

THANKS

Anyone who supported to projects, with suggestions and bug reports and any other action that helped the project grow or spread.

bin/ and lib/

These directories will contain executables and packages/libraries respectively.

t/ (test case directory)

The files in this directory are test scripts (.t), and are executed during the test phase of the building process.

Documentation

Unlike other kind of projects, a Perl projects don't strictly need to have any documentation file (like a man page for example); you can embed all you need directly in the code using the POD format.