Perl
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
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
Projects
-
Eugen Konkov asked for help with PRs to DBIx::Class.
- App-TimeTracker-Command-Jira
- 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 - Waiting 🕰️
- CPAN dashboard
- 2026.01.20
- Remove Travis CI - TODO 🎁
- Business-Westpac
- 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
- 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
- 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 - Waiting 🕰️ - TODO 🎁
- 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 - Waiting 🕰️
- DBIx-Class-Async
- 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
- 2026.01.08
- During our meeting MANWAR created this PR:
- Small improvements to repository to satisfy Kwalite - Waiting 🕰️
- Doubly-Linked-PP
- 2026.01.07
- PR: add meta-data to allow MetaCPAN to link to public repository - Merged ✅
- Net-Clacks
- 2026.01.07
- I sent an email to Rene Schickbauer - Waiting 🕰️
- MetaCPAN::Client
- 2026.01.06
- Issue: Reference {“relation” => “eq”,”value” => 14646} did not pass type constraint “Int” - Fixed ✅
- Exception-Reporter-Summarizer-PlackRequest
- 2026.01.06
- Issue: Why is the repo not included in META.json? - Waiting 🕰️
- Geo-IP2Proxy
- 2026.01.05
- PR: add meta-data to allow MetaCPAN to link to the repository - Waiting 🕰️
- Common-CodingTools
- 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
- 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
- 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
- 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
- 2022.12.05
- Article: CI for Win32-Wlan Perl module
- PR: Add GitHub Actions to run the tests on every push - Merged ✅
- RDF::KV
- 2022.12.07
- Article: Be pragmatic setting up CI for the RDF::KV
- PR: Add GitHub Actions - Waiting 🕰️
- Perl::Efl
- 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
- 2022.12.09
- Article: CI for Mojo-UserAgent-Cached and Plack-Middleware-Greylist
- PR: Add GitHub Actions - Merged ✅
- Plack-Middleware-Greylist
- 2022.12.09
- Article: CI for Mojo-UserAgent-Cached and Plack-Middleware-Greylist
- PR: Add GitHub Actions - Merged ✅
- Log::Any
- 2022.12.14
- Article: CI for the Log::Any Perl module
- PR: Add GitHub Actions - Merged ✅
- Marpa::R2
- 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
- 2022.12.19
- Article: CI for Plack-Middleware-LogAny
- PR: add github actions - Waiting 🕰️
- MIME-Types
- 2022.12.24
- Article: CI for perl5-MIME-Type
- PR: Add GitHub Actions - Merged ✅
- Data::Alias
- 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’.