The [Perl programming] Authors Upload Server


  1. Status of this document
  2. Uploading
  3. Registering as a developer
  4. Visit PAUSE
  5. Your duties, the basics, traps
  6. Register your namespace!
  7. Taking over
  8. Other conventions you should know about
  9. Related services on PAUSE
  10. CACERT-ified SSL on PAUSE
  11. Other useful links
  12. Software used to run PAUSE

Status of this document

This document is mirrored on CPAN as CPAN/modules/04pause.html.


A server dedicated to collect the work of perl authors is a [Perl programming] Authors Upload Server (PAUSE). PAUSE provides personal directories and enables their owners to upload their work into that directory themselves. The procedure of uploading is trivial and needs no explanation here. You'll understand it as soon as you have access to the PAUSE. There's only one thing you need to know as soon as possible:

Please, make sure the filename you choose contains a version number. For security reasons you will never be able to upload a file with identical name again. This strict requirement does have one exception: documentation files may be overwritten. There's a simple regular expression that draws the line between docu and code: /(readme|\.html|\.txt|\.[xy]ml|\.[pr]df|\.pod)$/i. Filenames matching this regexp can be uploaded as often as you like. By the way: it is highly appreciated if your packages come tarred and gzipped with a Makefile.PL (or Build.PL), so they can be installed in a standard way.

The upload server should not be used as a download server. Please don't mirror from there. The funet server in Finland mirrors frequently, so please try to download from there or from other CPAN sites.

Registering as a developer

Registered developers have a unique username and a home directory in the authors/id/ tree of CPAN. The write access to that directory is password protected.

If you have written a module, script, or documentation, if you have some porting material or patches you would like to contribute to the archive, visit Registration (Non-SSL version) and fill in the form

You will be notified by email about your registration. Please allow three weeks for proceeding, which should be the maximum during vacation time. Normally we hope to register you within a week. The resulting email traffic will run through and will be archived at isn't a mailing list, just an alias for the maintainers of the Perl 5 modules database. Please do not try to subscribe. Visit the archive instead.


As soon as you have a password (see registering) you are enabled to use some forms to interact with the PAUSE database (Non-SSL version). You can add files to your home directory, edit your name, email, and homepage address, delete your files, change your password on PAUSE, etc.

If you haven't got a password yet or have forgotten it, please visit (Non-SSL version) for further instructions.

Please, whenever you exchange email with the maintainers of PAUSE, mention either your userid or the name you used when you registered.

Your duties, the basics, traps

We trust that you have read the perlmodinstall, perlmodlib, perlmodstyle, and perlnewmod manpages and that you regularly check out uploads to CPAN and that you have been watching CPAN activities for a while to have an impression of how things fit together. It usually boils down to (slogan shamelessly stolen and adapted from sudo(1)):
  1. Think, better even talk before you upload
  2. Respect the namespace of others

Register your namespace!

Please, talk to other people (comp.lang.perl.modules, or any mailing list that fits your problem domain) before you decide upon the namespace you're going to use for your module. Usually it's not considered the perl way to have bureaucratic conventions, but when it comes to namespace pollution, there is the need of coordination. Just like the InterNIC has to care for unique names for internet hosts, somebody has to (sort of) guarantee uniqueness, consistency, and sanity of module names. is the place where all currently uploaded modules can be found and the email address is an alias for a hand full of experienced volunteers who try to give advice for the appropriate namespace for your modules.

Please consider the namespace you're going to occupy with all due sensitivity. Discuss it in the appropriate fora. Read what the perlmodlib manpage has to say about this. Reading these sections carefully will help you and us to greatly improve the usefulness of the CPAN and avoid cumbersome renaming at a later date.

Also: think carefully and honestly whether your module would be better off if it were integrated as an option into an already existing module. Sometimes it is for the best to put aside personal glory and join a collaborative effort: Perl itself is a good example of this. Contact the author of an existing module and ask whether your new features would fit into his framework. Even if you in the end decide to release the module as your very own, you really should know your 'competition', that is, know all the similar modules and the features they offer. Maybe you can learn from them, maybe you can help the users of your module better by giving them an overview about similar modules.

And please do consult the archives of before you post a module proposal. The fulltext search capabilities of the archive should help you to find similar suggestions and contact addresses. is low volume, so your search in the archive is quite targetted. is not a mailing list. Please do not try to subscribe. We do not want to establish yet another perl mailing list. If we encounter hot topics, we move the discussion to the appropriate mailing lists. The traffic on is archived at

When you're done with all your preparations, considerations, and investigations, visit the PAUSE and fill in the form for a new module namespace. Take your time filling in the rationale of the module proposal. Consider, your form will be posted to too, so other developers will probably stumble over this description many years later. The better the description, the better the chances that your module will actually be used.

You need not wait for approval. You can upload anytime, even before you fill in the form. Uploading and registering are only loosely coupled.

The indexes that are maintained automatically on CPAN all double check if the module names that are used in the uploaded packages are registered. The indexer unwraps all packages and scans the source code (namely all *.pm files) for package declarations. You run the risk of being ignored by the index generator if you do not talk to the PAUSE maintainers about the namespace you are using.

A frequent cause for confusion is the relation between CPAN itself and The PAUSE/CPAN indexer produces the files


These are the ones CPAN{,PLUS}.pm are using to find the downloadables and to mark releases as unauthorized. has its own indexer which has to satisfy other demands. It is based on the PAUSE/CPAN indexes but it is being changed more often because of the specific needs has.

Questions regarding the PAUSE/CPAN indexer should be sent to The feedback addresses for issues with are given at Click the feedback link there.

Taking over

So there's a module on CPAN that has a critical bug, lacks some features, or is generally under-maintained and you would like to step in?

It's great that you want to help out and we, the PAUSE admins, really don't want to create any unnecessary barrier to getting involved with an existing module (or distribution) on CPAN. There are, however, some precautions we have to take. The following paragraphs outline the reason for these precautions and the steps you have to take. Please read them carefully.

The majority of modules on CPAN has active maintainers. If the maintainer didn't answer the ticket you created in the request tracker, maybe she doesn't know about the CPAN ticketing system yet? Or she's just very busy this week and will get back to you in due time. The best way of helping out is to talk to the current maintainer about what you can do. Getting the PAUSE admins involved is only a last resort!

In some circumstances, we can grant co-maintenance permissions to you or others if the current maintainer of a module has entirely disappeared. You have to understand that is not a decision we make lightly. We are essentially giving write access to somebody else's work to third parties without explicit consent from the missing author. Since almost all code on CPAN has a free license, this is likely unproblematic from a legal point of view, but any violation of a contributor's trust in the PAUSE/CPAN mechanisms is a serious blow against the work of everybody who contributes to CPAN. For this reason, we try to tread very lightly, make the least possible use of the administrative privileges and attempt to protect voluntary contributors like yourself or the author of the module at hand from any unnecessary burden.

You have to realize that the author has probably invested a signficiant amount of time into writing the code in the first place and then gone through the additional work of making it available to others via CPAN free of charge. Therefore, it is crucial to be very polite when asking him or her for co-maintenance permissions. Politeness, however, does not suffice. Particularly when maintaining a module for which you received co-maintenance permissions from the admins (as opposed to being appointed by the author himself), you are *required* to respect the work and design of the author. A common fallacy is that people think they are much better programmers than their predecessors and that entitles them to judge others code quality and refactor everything. Whether or not your style is "better" is entirely irrelevant as it is not your code. Do not be arrogant, be respectful and tread lightly!

If you published your code to CPAN, then went on a hiking vacation (or to hospital) for a couple of weeks only to see that somebody took over, completely changed the design, and generally wreaked havoc, you would probably be rightfully upset and lose the good will that made you contribute in the first place. In order to prevent from happening, please go through the following steps and remember to be respectful all along:

  1. Use the request tracker to submit a bug report. If the module's documentation lists another request tracker, try that instead.
  2. Try to reach the author via mail. At the very least, try, any mail address the author listed on his page, and any mail address that's listed in his or her module documentation. If there's even a mailing list, don't forget that either.
  3. Search the web for other ways of contacting the author. Send more mail.
  4. Try posting in public places such as your journal, or other forums about your looking for the author.
  5. Wait for *at least* several weeks. Remember, the author might be on vacation, ill, or simply busy.
  6. Always keep in the picture. Send us a copy of your mails to the author. After a reasonable period of waiting, send another mail to the list explaining how you tried to contact the author and pointing at the proof thereof. Do not forget to include your PAUSE ID and that of the original module author in this mail.

Usually, after all this hassle, we are reasonably quick at assigning co-maintenance permissions, but don't hold your breath, we're only human after all. Most requests won't even get here as many authors who moved on and don't maintain their modules any more are very happy to see them taken care of and will assign (primary or) co-maintenance permissions after you've tracked them down and asked nicely.

Good luck and thanks for stepping up.

Other conventions you should know about


Do not upload the READMEs that are integrated in your distribution files. PAUSE is designed to take care of unwrapping your file with tar or zip, registering all the modules it finds in there, and placing the readme file (i.e. a file with the name README in the top level directory of your package) into your directory. PAUSE will change the name of the file to package-name.readme. It should do so within a few hours after your upload.


Please make sure all your *.pm files contain a $VERSION variable that conforms to the CPAN rules, i.e. the complete computation of $VERSION must take place on the one first line within the module that assigns to it. You can test if this is the case by running

perl -MExtUtils::MakeMaker -le 'print MM->parse_version(shift)' 'file'

on the filenames in question. The CPAN indexer will run this code within a Safe compartment, so maybe even if the above command succeeds, PAUSE may fail if you're doing file IO or other potentially dangerous things within that line.

Before you decide which style of versioning you prefer, you might want to read the version manpage.

Developer Releases

The automatic integration of your work into several indexes and directory trees is not always what you desire. Often you want to release code for testing out the next release. Code that propagates through CPAN but is not in a stable state. Something between two versions.

If you want to do that simply choose a filename that matches /\d\.\d+_\d/. Please choose a sequence that is easy to comprehend. People have adopted different conventions:

# 1.92 release and bug fixes

# dev releases towards 1.93

This allows two separate development tracks between 1.92 and 1.93.

Other people do odd and even, with all odd majors always being dev releases:


PAUSE will leave the underscore distributions alone: no readme will be extracted, no index will be updated, no symlinks will be created. Of course many users on the CPAN will take note of the developer releases. Cpan testers will test them and bug chasers will probably file bug reports in RT.


Any distribution that arrives at PAUSE is checked for package names contained in the distribution. A package name that arrives for the first time is automatically assigned either to the author who submitted it or to user perl if the distribution file is a perl distribution. A package name that has already been used before must be submitted by its author, otherwise PAUSE will trigger a warning to the administrator. That way PAUSE will prevent accidental usage of a package namespace by more than one author.

Be prepared that very soon after your upload your module will be tested on dozens of architectures by the never tired cpantesters. This helpful lot will send their findings to their mailing list and collect the results in a database. If they find problems, they try to diagnose or even solve them and inform you about their findings. So be prepared to get mail from them before you have closed the buffer in your editor.

Module::Build is an effort to overcome many deficiencies in MakeMaker and CPAN. One idea in that context is the storage of module-metadata in a file META.yml, that is being integrated into the module-tarball. PAUSE is supposed to follow this emerging standard. The current code base of the PAUSE indexer supports META.yml by extracting it and storing it in a separate file that is called package-name.meta in the same directory. The PAUSE indexer honours the contents of the no_index and the provides fields. All other fields are currently ignored.

Related services on PAUSE

Two documents are available about authors. 00whois.html is a list of authors, mailing lists and mailing list archives in HTML format,

And 01mailrc.txt.gz is a smaller list intended to be used as a .mailrc file. Both files are maintained automatically.

When new files arrive on the PAUSE, an Upload Scanner program scans the new files and categorizes them according to their contents. It tries to detect namespace clashes and to keep track of version numbers.

The document 01modules.index.html lists only the most recent distribution files that contain the latest of any given module that is available on CPAN. A second version of this document is also available that is sorted by modification date. Both are maintained by the scanner automatically.

The listing 02packages.details.txt is also produced automatically. It is intended for programs but sometimes is a valuable information for humans too. It simply lists the current version number and the distribution file for all packages found on CPAN.

There are also two symlink trees of modules maintained automatically. One is based on the basenames of the packages involved: by-module and the other one divides the modules by the chapters of the Module List: by-category.


On Sat, April 19 2008, PAUSE switched to use a cacert certificate. Get it now.

As soon as you have cacert support installed into your browser, you need not confirm the SSL connection manually anymore. If you have no cacert certificate in your browser (and unfortunately many browsers do not have it) you may choose to either install it manually or still accept the connection without installing the cacert certificate.

Repeat: you can download the certificate from cacert directly. Cacert provides guidance how to install this certificate into your browser.

Debian users can also access the cacert root certificate by installing the ca-certificates package. It contains the file the cacert root certificate as /usr/share/ca-certificates/ This can be installed into most browsers via preferences. Guidance provided in the above link.

The fingerprint of the cacert root certificate is SHA1 Fingerprint=13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33

A big ThankYou to RJOOP for providing it.

In case all of the above does not work out for you, the fingerprint of the new PAUSE certificate is SHA1 Fingerprint=82:7A:33:53:B4:20:36:D4:37:E4:54:F6:F3:15:87:63:3B:23:52:3E

Other useful links

You have forgotten how you're supposed to package your software? Maybe the perlnewmod manpage can help you.

A real FAQ is about how to adopt or take over a module from somebody else? perlfaq7 has the full answer (as of rev. 393).

You wanted to ask questions about authoring? Maybe the module authors mailinglist or the Perl Monks will give you a lead.

You wanted to include proper tests in your package? A myriad of general purpose and custom tailored testing modules are discussed on the QA mailing list.


The software running PAUSE consists of a database, which is driven by mysql and a mod_perl server with Ben-SSL. Besides many of the perl standard modules like CGI, Data::Dumper, Text::Wrap, File, Directory, and IO modules, PAUSE itself uses lots of modules from the CPAN. For a complete list, feel free to visit Also a lot of work is done by the mirror program by Lee McLoughlin, available from the CPAN scripts/ftpstuff directory.

The PAUSE source code is kept in a git repository at git://

Thanks to all of you for your great contributions!

Contact or Andreas König for any questions.
GnuPG public key for Andreas Koenig <>
Version: GnuPG v1.4.6 (GNU/Linux)