mcpField
P
perl-lint

perl-lint

github.com/jamie-bitflightTesting & quality50 installs
Repository

About perl-lint

perl-lint is a skill for Perl developers that guides Perl::Critic checks and perltidy formatting, including tool detection, severity selection, and configuration.

Key features

  1. 01Detects Perl::Critic and perltidy
  2. 02Runs severity-based code analysis
  3. 03Explains findings and severity levels
  4. 04Guides perltidy formatting
  5. 05Covers project configuration files

Use cases

  1. 01Check Perl scripts for policy violations
  2. 02Format Perl files to project conventions
  3. 03Choose lint severity for a review

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/jamie-bitflight/claude_skills --skill perl-lint

After installing, type/perl-lintin Claude Code to confirm it loaded.

Bundled filesreferences/code-examples.md

Details

From the project README

Perl Linting and Formatting

Run Perl::Critic analysis and perltidy formatting with automatic tool detection.

Workflow

  1. Check if perlcritic/perltidy are installed
  2. Run analysis on specified files
  3. Report findings with severity levels
  4. Suggest fixes or format code

Tool Detection

First, verify tools are available:

# Check perlcritic
command -v perlcritic >/dev/null && echo "perlcritic available" || echo "Install: cpanm Perl::Critic"

# Check perltidy
command -v perltidy >/dev/null && echo "perltidy available" || echo "Install: cpanm Perl::Tidy"

Perl::Critic Analysis

Running perlcritic
# Default analysis (severity 5 - gentle)
perlcritic script.pl

# All severities (1 = strictest)
perlcritic --severity 1 script.pl

# Specific severity level
perlcritic --severity 3 script.pl

# With verbose explanations
perlcritic --verbose 11 script.pl

# Single policy
perlcritic --single-policy RequireUseStrict script.pl

# Exclude policies
perlcritic --exclude RequireUseWarnings script.pl
Severity Levels
LevelNameDescription
5GentleObvious, unambiguous issues
4SternUsually bad practices
3HarshControversial but recommended
2CruelPickier about style
1BrutalMaximum strictness
Common Policies
PolicySeverityIssue
RequireUseStrict5Missing use strict
RequireUseWarnings4Missing use warnings
ProhibitBarewordFileHandles5Using bareword filehandles
ProhibitTwoArgOpen5Two-argument open()
ProhibitStringyEval5Using eval with string
RequireTidyCode1Code not formatted
Configuration File

Create .perlcriticrc in project root:

# .perlcriticrc
severity = 3
verbose = 8
theme = core

# Exclude specific policies
[-Documentation::RequirePodSections]
[-InputOutput::RequireBriefOpen]

# Configure specific policy
[CodeLayout::RequireTidyCode]
perltidyrc = .perltidyrc

[Variables::ProhibitPackageVars]
packages = Data::Dumper File::Find

[TestingAndDebugging::ProhibitNoStrict]
allow = refs
Verbose Formats
LevelOutput Format
1Line only
4Line + Column
8Line + Policy + Severity
10Full explanation
11With PBP page reference

Perltidy Formatting

Basic Usage
# Format file (creates .bak backup)
perltidy script.pl

# Format to stdout (no backup)
perltidy -st script.pl

# In-place edit (no backup)
perltidy -b -nst script.pl

# Check if tidy (exit code)
perltidy -st script.pl | diff -q - script.pl
Common Options
# Basic formatting
perltidy -i=4 -ci=4 -l=100 script.pl

# Full command with common options
perltidy \
    --indent-columns=4 \
    --continuation-indentation=4 \
    --maximum-line-length=100 \
    --vertical-tightness=2 \
    --paren-tightness=1 \
    --brace-tightness=1 \
    script.pl
Configuration File

Create .perltidyrc in project root:

# .perltidyrc

# Indentation
--indent-columns=4
--continuation-indentation=4

# Line length
--maximum-line-length=100

# Blank lines
--blank-lines-before-subs=1
--blank-lines-after-block-opening=0

# Spaces
--paren-tightness=1
--brace-tightness=1
--square-bracket-tightness=1

# Vertical alignment
--no-outdent-long-quotes
--no-outdent-long-comments

# Output
--backup-and-modify-in-place
--backup-file-extension=/

Combined Workflow

Lint and Fix

Code examples

Interpreting Results

Severity 5 (Critical)

Must fix immediately:

Bareword file handle opened at line 10, column 1.
Two-argument "open" used at line 15, column 5.

Fix:

# Wrong
open FILE, $filename;

# Correct
open my $fh, '<', $filename;
Severity 4 (Important)

Should fix:

Code before strictures are enabled at line 1.

Fix:

# Add at top
use strict;
use warnings;
Severity 3 (Recommended)

Consider fixing:

Regular expression without "/x" flag at line 25.

Installation

If tools are missing:

# Install both tools
cpanm Perl::Critic Perl::Tidy

# Verify installation
perlcritic --version
perltidy --version

Quick Commands

Lint specific file:

perlcritic --severity 4 --verbose 8 path/to/file.pl

Lint all Perl files in directory:

find . -name '*.pl' -o -name '*.pm' | xargs perlcritic --severity 4

Format all files:

find . -name '*.pl' -o -name '*.pm' | xargs perltidy -b

Comments

Markdown supported