Perl
- Events
- Chat
- How to select a Perl project to contribute to?
- What and how to contribute to a Python project?
- Tools
- TODO
- Project reports
Events
This material is being used during the events organized in the Perl-Maven group.
Chat
How to select a Perl project to contribute to?
- A perl-based project that you use. Not a CPAN module, but an application. It is will be nice to be contribute to one of those, but contributing code to a mature project is difficult. Most likely all the simple problems have been already fixed so what you have now are hard. That means you’ll have to invest 10s or even 100s of hours. Not something I’d recommend when you are new to open source contribution.
- MetaCPAN itself is one of those perl-based projects, but of course it has a lot of visibility in the Perl community. Do you know the names of the contributors?
- CPAN Dashboard
- See the issues
- Check my report and fix issues there. SZABGAB
- Check the report of the other people there and fix their issues.
- Encourage other CPAN authors to send a PR to the Dashboard so they will be also included.
- A CPAN module that you use. However, most likely the modules you use are also rather mature.
- If you contribute to a module that recently had a relase and is maintained, it is much more likely that your work will get feedback and might be even accepted than if you work on a module that has not been maintained for a while. Take for example DBIx::Class. It is one of the most important modules. It has lots of open PRs and open issues, but it was not touched for 3 years. So if you’d like to improve it you might need to take over the maintainence. That’s a much bigger job than sending a single PR.
- A direct dependency of a project or a module that you use. Listed in one of the files:
Makefile.PL,Build.PL,cpanfile, etc. - An indirect dependency. Dependency tree of a Perl module on CPAN.
- Search on GitHub: A semi-popular, recently updated Perl project
stars:100..1000 pushed:>2026-01-10 language:Perl - Pick a popular project and work on stale PRs. That is PRs where there is already good work, but the original author (of the PR) has vanished.
- Adopting a module, especially one in a custodian account, or by one of the authors listed in the InMemoriam module. Adopting a module comes with responsibilities and it is a lot more work than sending a single PR, but there is not other way to make progress with these modules.
- See this article on how to adopt a CPAN module.
- (PAUSE Custodial Account)
- Acme::CPANAuthors::InMemoriam
- or one of the modules with special owner as described here:
- CPAN Digger helps you find some low-hanging fruits. Recently released distributions…
- … that are missing some data from their META files.
- … that have no Continuous Integration set up.
- … where you can run generate test coverage report and add tests to improve the safety net of the project.
What and how to contribute to a Perl project?
- CPAN Digger / MetaCPAN
- It would be probably better to add these to MetaCPAN, but we can start by adding that to CPAN::Digger.
- Create a web page with the “river” showing the most relied on distributions. (Contribute to this has the widest impact.)
- Create a page listing all the modules that have the special PAUSE ids listed above, along with their “river” status.
- Create a page listing all the modules of authors who have passed away (from the InMemoriam module listed above), along with their river status.
- Taking over and maintaining these is keeping their work live on.
- Link to VCS: Make sure MetaCPAN links to the VCS of the module. If not, try to locate the source of the module and send a PR updating the meta-data of the project. If you can’t find it, then you might want to send an email to the author asking if the project has a public repository.
- Testing
- Try to run the tests locally or better yet in a Docker container.
- Testing articles
- Testing book
- Test::More
- Generate test coverage report Devel::Cover
- CI
- If there are tests, check if there is a CI?
- Perl and CI
- Setting up CI:
- Use the perl-tester Docker container
- GitHub Actions
- GitLab pipelines
- Dependencies
- Add dependabot for GitHub Actions.
- I think Dependabot does not support Perl.
- Code formatting
- Linting
- Fuzz testing
- The App-Test-Generator distirbution comes with a tool called fuzz-harness-generator
- Mutation testing
- Code complexity analyzis
- Code reading
- Refactoring
See also this issue about the goals.
Tools
- GitHub Action: perl-actions/install-with-cpm
- GitHub Action: perl-actions/perl-versions
- GitHub Action: shogo82148/actions-setup-perl
- Docker: perldocker/perl-tester - source
- Docker: szabgab/perl - source
docker run -it --rm -v$(pwd):/opt perldocker/perl-tester:5.42 bash
docker run -it --rm -v$(pwd):/opt --user ubuntu szabgab/perl bash
TODO
If a project we already worked on accepted our PRs we might want to do more. For some I even added the word TODO to make it easier to find them.
In addition I asked around in various Perl-related groups and some people asked for help. I am collecting these here so we can decide what to work on.
- Eugen Konkov asked for help with PRs to DBIx::Class and some other modules
- Avi Shai “Veesh” Goldman suggested DBIx-QuickORM as a potential alternative to DBIx::Class.
- mojoeye
- Michael R. Davis (MRDVT) mentioned his modules: Geo::H3 and Geo::H3::FFI
- MetaCPAN: How to see the changes after updating the profile?
- Gabor Kiss suggested Future, Future::AsyncAwait, and companion.
- Jeannette Fulbright suggested Tk::DynaTabFrame “The navigation between tabs by either tab key or arrow keys does not work correctly.”
- Lester Hightower suggested ReadonlyX “You may like digging into the internals of that module, and looking at how it calls Internals::SvREADONLY().” It has an incorrect link to its repo. The correct one seems to be this repo and it is archived.
- Rangana Withanage suggested Params::Validate
- Test::HTML::Tidy needs HTML::Tidy that needs tidyp. The repository of the latter 2 were archived. The first one does not even have a repo. Let’s figure out what to do - if anything - with this.
Project reports
- Crypt-OpenSSL-RSA - Todd Rinaldo (TODDR)
- 2026.01.30
- PR: Remove debian:buster from the CI - Waiting 🕰️
- PR: Add dependabot - Waiting 🕰️
- PR: Separate the apt-get and the yum steps in the CI - Waiting 🕰️
- Algorithm-SlidingWindow - Joshua S. Day (HAX)
- 2026.01.26
- PR: chore: Make sure the META.json gets the data during release - Waiting 🕰️
- XML-Sig-OO - Michael Shipper (AKALINUX)
- 2026.01.26
- PR: chore: Make sure the META.json gets the data during release - Merged ✅
- CtrlO-PDF - Andrew Beverley (ABEVERLEY)
- 2026.01.25
- PR: chore: add GitHub Actions to run the tests on every push - Merged ✅
- PR: Extend the test to compare the PDF to an earlier version of the generated file - Merged ✅
- Issue: Can’t use an undefined value as an ARRAY reference - Waiting 🕰️
- 2026.01.30
- PR: Add test that adds a logo - Waiting 🕰️
- TODO: Add more tests!
- JSON-Lines
- 2026.01.24
- PR: Add CI workflow for Perl testing by Jonathan - Waiting 🕰️
- Protocol-Sys-Virt - Erik Huelsmann (EHUELS)
- 2026.01.24
- Issue: Warning during tests - Fixed ✅
- PR: Add CI workflow for Perl testing by Peter Nilsson - Merged ✅
- Video recordings 🎦
- MIME-Lite - Ricardo SIGNES (RJBS)
- 2026.01.24
- PR: setup GitHub Actions to run the tests on every push and PR - Waiting 🕰️
- PR: Add gitignore for some generated files - Waiting 🕰️
- PR: Add test case with long subject line - Waiting 🕰️
- Video recordings 🎦
- Test Coverage:
cover -test - TODO: shall we remove the
foldfunction? - TODO: Increase test-coverage
- TODO: Split the packages to individual files.
- TODO: remove the
#!/usr/bin/perlline from the tests
- App-TimeTracker-Command-Jira - Michael Kröll (PEPL)
- The link to the repository was incorrect. I sent and email to Michael Kröll, the author, who pointed me to the correct repository.
- The project uses Dist::Zilla and will insert the correct address during the next releases. - Waiting 🕰️
- PR: Add GitHub Actions - Merged ✅
- Issue: Deprecated dzil plugins - Fixed ✅
- CPAN dashboard - Dave Cross (DAVECROSS)
- 2026.01.20
- Remove Travis CI - TODO 🎁
- Business-Westpac - Lee Johnson (LEEJO)
- 2026.01.20
- PR: Update bugtracker and repository URLs in Makefile.PL - Waiting 🕰️
- PR: chore: Add GitHub Actions - Waiting 🕰️
- PR: chore: remove generated files - Waiting 🕰️
- LaTeX-Driver - Erik Huelsmann (EHUELS)
- 2026.01.20
- The tests run locally have some strange output Because of the lack of
makeindex. - TODO 🎁 - I started to setup GitHub Actions, but it failed. We might want to explore this in a meeting. - TODO 🎁
- XML-Easy - James E Keenan (JKEENAN)
- 2026.01.14
- Add GitHub Actions to run the tests on every push - Merged ✅
- perldocker/perl-tester Docker image
- 2026.01.14
- Issue: Update text on Docker HUB - Waiting 🕰️
- Issue: Add threaded perl - Waiting 🕰️ - TODO 🎁
- 2026.01.20
- Issue: Adding more Dist::Zilla plugins - Done ✅
- PR: add Dist::Zilla::Plugin::CopyReadmeFromBuild - Merged ✅
- PR: add Dist::Zilla::Plugin::HasVersionTests - Merged ✅
- Issue: buster supports only up to perl 5.40 afterward bookworm is needed - Waiting 🕰️ - TODO 🎁
- PR: Use slim-bookworm for perl 5.42 and later - Merged ✅
- DBIx-Class-Async - Mohammad Sajid Anwar (MANWAR)
- 2026.01.08
- Make Meta:CPAN link to GitHub issues - Merged ✅
- gitignore some generated files - Merged ✅
- Add GitHub Workflow and add test dependencies - Merged ✅
- JQ-Lite - Kawamura Shingo (SHINGO)
- 2026.01.08
- During our meeting MANWAR created this PR:
- Small improvements to repository to satisfy Kwalite - Waiting 🕰️
- Doubly-Linked-PP - Robert Acock (LNATION)
- 2026.01.07
- PR: add meta-data to allow MetaCPAN to link to public repository - Merged ✅
- Net-Clacks - Rene Schickbauer (CAVAC)
- 2026.01.07
- I sent an email to Rene Schickbauer - Waiting 🕰️
- MetaCPAN::Client - Mickey Nasriachi (MICKEY)
- 2026.01.06
- Issue: Reference {“relation” => “eq”,”value” => 14646} did not pass type constraint “Int” - Fixed ✅
- Exception-Reporter-Summarizer-PlackRequest - Matthew Horsfall (alh) (WOLFSAGE)
- 2026.01.06
- Issue: Why is the repo not included in META.json? - Waiting 🕰️
- Geo-IP2Proxy - IP2Location (LOCATION)
- 2026.01.05
- PR: add meta-data to allow MetaCPAN to link to the repository - Waiting 🕰️
- Common-CodingTools - Richard Kelsch (RKELSCH)
- 2025.12.26
- PR: Add links to VCS - Waiting 🕰️
- PR: Add .gitignore - Waiting 🕰️
- PR: Add GitHub Actions - Waiting 🕰️
- PR: Add test - Waiting 🕰️
- JSON::Schema::Validate - Jacques Deguest (JDEGUEST)
- 2025.12.01
- Showcase: Localised JSON Schema validation in Perl
- PR: add .gitignore file - Waiting 🕰️
- PR: Setup CI - GitLab pipeline - Waiting 🕰️
- Open issue
- Also check out the GitLab pipeline of the Wanted module
- SVG - Mohammad Sajid Anwar (MANWAR) + Gabor Szabo (SZABGAB)
- 2025.11.11
- As I am a maintainer of this project I could commit and push directly:
- add a test case to check loading attributes and trying to load bad attribute ✅
- add a test case for creating new instance from an existing one ✅
- Net-Async-Redis-XS - Tom Molesworth (TEAM)
- 2022.12.02
- Article: Add GitHub Action CI to the Net-Async-Redis-XS Perl module
- PR: Add GitHub Actions for CI - Merged ✅
- Win32-Wlan - Max Maischein (CORION)
- 2022.12.05
- Article: CI for Win32-Wlan Perl module
- PR: Add GitHub Actions to run the tests on every push - Merged ✅
- RDF::KV - Dorian Taylor (DORIAN)
- 2022.12.07
- Article: Be pragmatic setting up CI for the RDF::KV
- PR: Add GitHub Actions - Waiting 🕰️
- Perl::Efl - Maximilian Lika (PERLMAX)
- 2022.12.08
- Article: Adding CI to Perl::Efl - sometimes you need to do some extra work
- PR: Add GitHub Actions - Merged ✅
- Mojo-UserAgent-Cached - Nicolas Mendoza (NICOMEN)
- 2022.12.09
- Article: CI for Mojo-UserAgent-Cached and Plack-Middleware-Greylist
- PR: Add GitHub Actions - Merged ✅
- Plack-Middleware-Greylist - Robert Rothenberg (RRWO)
- 2022.12.09
- Article: CI for Mojo-UserAgent-Cached and Plack-Middleware-Greylist
- PR: Add GitHub Actions - Merged ✅
- Log::Any - Doug Bell (PREACTION)
- 2022.12.14
- Article: CI for the Log::Any Perl module
- PR: Add GitHub Actions - Merged ✅
- Marpa::R2 - Jeffrey Kegler (JKEGL)
- 2022.12.16
- Article: Moving from Travis-CI to GitHub Actions for Marpa::R2
- Issue: CI: Does Travis-CI still work for you?
- Issue: IO::Select and other modules in the IO package report version 1.49 whle IO itself is 1.50
- Issue: cpan/engine/read_only/tests/* files missing
- PR: Add GitHub Actions - Rejected ❌ (it will be setup later)
- Plack-Middleware-LogAny - Sven Willenbuecher (SVW)
- 2022.12.19
- Article: CI for Plack-Middleware-LogAny
- PR: add github actions - Waiting 🕰️
- MIME-Types - Mark Overmeer (MARKOV)
- 2022.12.24
- Article: CI for perl5-MIME-Type
- PR: Add GitHub Actions - Merged ✅
- Data::Alias - Matthijs van Duin (XMATH)
- 2022.12.25
- Article: CI for Data::Alias in Perl - including threaded perl
- PR: Add GitHub Actions - Merged ✅
Notes
- In the Dist::Zilla world Dist::Zilla::Plugin::GithubMeta adds the META information based on a github remote called ‘github’ or ‘origin’.