Built from main at 1d902a0 on 2026-11-14

Perl

Recognised by .pm modules and by the build systems of a distribution: ExtUtils::MakeMaker (Makefile.PL), Module::Build (Build.PL), Dist::Zilla (dist.ini) and a cpanfile of dependencies. Once the project is known to be Perl, .pl scripts (Prolog's suffix too), .t tests and .psgi applications are Perl; POD and XS files belong to the distribution without being Perl.

tests-run

Test::More or Test2 tests in t/*.t (or xt/), run by prove, make test, ./Build test, dzil test, minil test, yath test, or Devel::Cover's cover -test, which runs them instrumented.

coverage

Devel::Cover counts statements and branches, and conditions besides (the bonus): cover -test (or cover -report after the tests), or the tests run with HARNESS_PERL_SWITCHES=-MDevel::Cover.

platform-matrix

The toolchains are Perl versions: shogo82148/actions-setup-perl's perl-version, a perl: image, or perlbrew install.

compiler-warnings

Perl's pragmas and lints: every module, script and .psgi starts with use strict and use warnings (or a module that implies them: Moose, Moo, Mouse, Modern::Perl, Mojo::Base, Test2::V0, use v5.36; use v5.12 implies strict alone), and perlcritic runs in CI (or Test::Perl::Critic in the tests).

warnings-as-errors

use warnings FATAL => 'all' in the modules, or Test::Warnings (Test::NoWarnings, Test::FailWarnings) in the tests, which fail on a warning.

code-formatting

perltidy: perltidy --assert-tidy fails on a file it would change, perltidy -b rewrites; tidyall --check-only checks, tidyall -a rewrites. .perltidyrc holds the style; perltidy has a default without it.

static-analysis

perlcritic (or tidyall), with the policies .perlcriticrc names (severity 5 without).

dependency-audit

cpan-audit (CPAN::Audit): cpan-audit deps ..

function-limits

lizard parses Perl, so CI runs it with a length limit.

committed-artifacts

blib/ and the MYMETA.* files of a MakeMaker or Module::Build distribution, Module::Build's _build/, Carton's local/ beside a cpanfile, and Devel::Cover's cover_db/.

vcs-ignore

The same, each of those the project's build systems write: blib/, MYMETA.*, cover_db/ for a MakeMaker distribution; _build/ too for Module::Build; local/ beside a cpanfile. Plain modules without a build system need only cover_db/ ignored.

Not judged

Perl is interpreted (hardening, cxx-extensions, ci-build-types) and dynamically typed (type-checking); no code security scanner, fuzzer or mutation testing tool the validator knows reads Perl; Carton's cpanfile.snapshot for applications belongs to dependency-management, not judged for Perl yet.