A couple of times recently I've had to deal with distributions that have both a Build.PL and Makefile.PL . I've never been sure of the right way to handle such dists, and in both of the recent times I ended up with problems. From talking to various people on IRC and elsewhere, it seems like there's no good reason to have both. Personally I go with Makefile.PL (with ExtUtils::MakeMaker) if it's someone else's dist, or Dist::Zilla if it's a full adoption.

I had done a number of releases of Text::Autoformat, using Makefile.PL to make dist . But for the 1.70 release, for some reason I used Build.PL . The main module has two cuckoo modules, which don't have their own $VERSION . PAUSE wasn't happy with the 1.70 release, and as a result didn't index it. I don't understand everything about this, but KENTNL kindly raised a PAUSE bug on this. In this case I'm going to switch to Dist::Zilla (with DCONWAY's ok) and refactor the two cuckoo packages into regular modules.

You could go with Build.PL (Module::Build), but I've also had a problem with that recently. Plus it's about to be dropped from the core Perl distribution, which for me is a good argument to either go with ExtUtils::MakeMaker (which is being actively maintained at the moment), or Dist::Zilla, which isn't in core, but is actively maintained, and makes your life easy.

There are 6,330 distributions with a Build.PL on CPAN, and 27,851 with a Makefile.PL . Of those, 3767 have both. I think these are all the result of Module::Build building a Makefile.PL via Module::Build::Compat.

Are there any good reasons to have both?

Here's the script I used to find the dists, and a list of dists with Module.PL and Makefile.PL .

Please enable JavaScript to view the comments powered by Disqus.

Disqus