When you run Makefile.PL, it makes a Makefile. That's the whole point of
MakeMaker. The Makefile.PL is a simple program which loads ExtUtils::MakeMaker and runs the WriteMakefile() function to generate a
Makefile.
Here's an example of what you need for a simple module:
WriteMakefile(
NAME => 'Your::Module',
VERSION_FROM => 'lib/Your/Module.pm'
);
NAME is the top-level namespace of your module. VERSION_FROM is the file
which contains the $VERSION variable for the entire distribution. Typically
this is the same as your top-level module.
This is the directory where your .pm and .pod files you wish to have
installed go. They are layed out according to namespace. So Foo::Bar
is lib/Foo/Bar.pm.
Tests for your modules go here. Each test filename ends with a .t.
So t/foo.t/ 'make test' will run these tests. The directory is flat,
you cannot, for example, have t/foo/bar.t run by 'make test'.
Tests are run from the top level of your distribution. So inside a test
you would refer to ./lib to enter the lib directory, for example.
A short description of your module, what it does, why someone would use it
and its limitations. CPAN automatically pulls your README file out of
the archive and makes it available to CPAN users, it is the first thing
they will read to decide if your module is right for them.
A file full of regular expressions to exclude when using 'make
manifest' to generate the MANIFEST. These regular expressions
are checked against each file path found in the distribution (so
you're matching against ``t/foo.t'' not ``foo.t'').
Here's a sample:
~$ # ignore emacs and vim backup files
.bak$ # ignore manual backups
\# # ignore CVS old revision files and emacs temp files
Since # can be used for comments, # must be escaped.
MakeMaker comes with a default MANIFEST.SKIP to avoid things like
version control directories and backup files. Specifying your own
will override this default.