After over 7 years, a new release of
Bloom::Filter is out! Thanks to Maciej Ceglowski (MCEGLOWS / @baconmeteor), who was kind enough to give me co-maint permissions. If you don’t know what bloom filter is1, please read “Using Bloom Filters” (article written by Maciej in 2004, but still up-to-date and very interesting). Instead of writing about bloom filters, in this blog post I’d like to concentrate on Perl module release process, as a part of my personal “diving into Perl” process.
First, just a quick summary what’s included new version of
- two bug reports closed2
- links to GitHub repository
- updated revision history in Changes (as per
- cleaned documentation
- tweaked Makefile.PL
As you can see – only minor changes, no new features or optimizations. Still, it was hard for me to deal with “legacy” distibution – written by someone else in 2004, last released in 2007, when Perl was in different shape and some tools didn’t exist yet.
Bloom::Filter is my third module I uploaded on CPAN, but first managed by
ExtUtils::MakeMaker (EUMM). Previously I used
Dist::Zilla (dzil) and
Dist::Milla (milla) to create a module from scratch and release it, which was quite overwhelming in case of
Dist:Zilla (even with great documentation and tutorial), and very easy in case of
However, what should I do to make a realease of EUMM module was not very obvious to me. Despite I had read few blog posts and tutorials dealing with “How to bootstrap release and manage a Perl module?” topic, none of them actually compared side by side and explained differences between dzil, milla, EUMM and other tools such as
CPAN::Uploader4. It was quite confusing for a newbie like me and I had to read documentation of each of these modules to find out if I needed that module or not. As it turned out, managing distribution created with EUMM is harder comparing to Dist::[ZM]illa, because one has to do many things manually. EUMM documentation says it’s just an utility designed to write a Makefile for an extension module from a Makefile.PL. Bearing that in mind, next steps involved digging in EUMM documentation and hacking Makefile.PL. In particular, these are some problems I had to deal with (each of these should actually begin with “Contrary to dzil / milla, …”):
- To maintain compatibility with older EUMM version, I had to remove some features by hand in Makefile.PL. I guess I expected that MakeMaker is actually MakeMakerMaker, which it isn’t, obviously.
- README and LICENCE were not autogenerated and I had to maintain cohesion between Makefile.PL and these files.
- After doing
make distthere’s no next step to do actual release – tag, push and upload, another tool must be used for that (I used
So I found out EUMM is not a distribution making swiss knife, just a tool for managing Makefile creation process. That said, I don’t see a reason to use “raw”
Module::Build plus some release tool instead of
Dist::Milla – for my needs it’s more than enough, it takes care of all boilercode I don’t need to write, does all git-related release stuff, and changes version all over module.5
Speaking of versioning – according to David Golden’s article, it should be a boring task. It wasn’t, at least this time. I had to face two (actually three, third was, as always in Perl, TIMTOWTDI) issues here:
- There was already 1.1 release on BackPAN (How is that possible?)
What is proper next development release for 1.0? I tried
my $version = Perl::Version->new('1.0'); $version->inc_alpha; say $version;
which is unexpectedly
I’ve decided to just do one release for 1.1, without any dev releases. Luckilly, it worked without any problem, although it takes a while to see the release on (Meta)CPAN. Now, when this post is finished, I have to contact some downstream authors, which I know have been using patched version of
Bloom::Filter and point them to the new release.
Oh, there’s this question which I am asking myself: should I move an old (i.e. co-maintained) module to
Dist::Milla, or should it stay on EUMM forever?
Actually I don’t know how to filter closed issues which were fixed in 1.1 on RT… Any help?↩
I have to write a blog post about my
I deliberately listed tools which aren’t used to same tasks, although my first impression was different.↩