The Perl Toolchain Summit (previously known as the Perl QA Hackathon) is an annual coding workshop for people involved in the Perl toolchain, testing, quality assurance, and related issues. I was glad to be invited to this one, my fourth.

Day 0

This year’s PTS was held in Bisham Abbey, just outside Marlow, a small town in Buckinghamshire, England. I’d never been to Marlow before, but it was quite charming, and had a surprising selection of good restaurants. The Abbey itself is an impressive ancient building, just on the banks of the Thames — a lovely venue for the summit! Our accommodation was in the National Sports Centre a couple of minutes’ walk away on the same campus.

We began on Wednesday 24th April by meeting in a local pub, the Marlow Donkey, to catch up with old friends, socialise, and perhaps talk about some of the things we were planning to work on.

Day 1

I began with my now-habitual run through outstanding issues for the core Perl 5 Configure script. Karl Williamson had earlier reported a problem with rebuilding Configure from the metaconfig units: he couldn’t reproduce the build that was committed to the Perl repository. After investigation, I discovered that there was a bug in the implementation of the symbol-exclusion feature I added 18 months ago, which I hadn’t noticed because I was inadvertently running mconfig with a spurious option. Oops. I fixed that bug — which merely involved initialising one of its very many global variables at the right time — and submitted a PR upstream to dist.

With that out of the way, I also did some work on backporting changes from Configure to the metaconfig units. The mconfig bug had clearly got in other people’s way when they’d tried to do that. Tux kindly fixed up an issue there — I neglected to rebuild the glossary file — but I’m pleased to report that the core Configure is now fully in sync with the metaconfig units.

After that, I started to look again at the problem of getting Devel::Cover to report on coverage for top-level code in modules. I’d looked into that somewhat last year, but got quite bogged down in the intricacies of the core. It remained quite frustrating this year: I kept thinking I’d found a way to do it (and some of those techniques would have been applicable in older versions of Perl), but then finding show-stopping issues.

In the evening, we split into a few loose groups, most of which started on the half-hour walk to Marlow to find refreshment. Quite a lot of us had a drink in the Two Brewers; I then went on in a smaller group to the Giggling Squid for some very good Thai food.

Day 2

I began the day with a couple of small Perl core things. While doing research for the Devel::Cover work, I’d found a very informative commit message about the way op allocation is done. I decided it would be much more useful to have that in the internals documentation itself, rather than hidden in a commit message from 2012, and committed it.

I also pushed a small doc change noting the very surprising behaviour of local $x[-1] = … when the length of the underlying array changes during the scope of the local . The Perl core is currently in release freeze, but once 5.30 is out, we’re likely to change the behaviour of that construct.

I then went back to the problem of how to persuade Perl to hold onto the compiled form of modules’ top-level code until the program is about to exit, so that Devel::Cover can report on its coverage. After another false start or two, I finally worked out how to do it, and described my findings to Paul Johnson. Sadly, it will require a new feature in Perl itself, but there’s nonetheless a good chance that Devel::Cover will be able to do this on Perl 5.32 and up.

The Friday evening saw the group dinner, kindly supplied by Zoopla, one of our sponsors. We ate good food in a banqueting room in the abbey.

Days 3 & 4

Saturday was a little unproductive for me, unfortunately. I returned to something I’ve worked on before: the Perl 5 porting tool that imports dual-life modules from CPAN. It currently works reasonably in many situations, but it’s not great at handling distributions where the core must use a customised version of the code, so that’s what I was trying to work on.

The tool has the annoying property that it’s grown piecemeal over time, and relies heavily on a large set of global variables. (It’s not quite as global-heavy as the metaconfig code, but I confess I did ask why I keep finding myself working on software that’s made of global variables.) After getting the outline of the customisation-handling code up and running, I decided that getting it to work reliably would benefit from refactoring away some of the globals. I more or less finished that by the end of the day on Sunday, and hopefully it should now only take me a couple of hours to finish off the new feature.

On the Sunday night, most of those who hadn’t already had to leave joined up for Vietnamese food — we pretty much took over the place! I took an early train to London on the Monday morning, getting to the office slightly tired, but fired up about everything the attendees had accomplished.

Sponsors for the PTS 2019

PTS travel and accommodation for most attendees is covered by the organisers, and there is no entrance fee. None of the results of the Perl Toolchain Summit would therefore be possible without the support of our sponsors. I offer my thanks to them:

Booking.com, cPanel, MaxMind, FastMail, ZipRecruiter, Cogendo, Elastic, OpenCage Data, Perl Services, Zoopla, Archer Education, OpusVL, Oetiker+Partner, SureVoIP, YEF.