Recent Perl modules, releases and favorites.
Last updated 16 June 2026 04:30 AM
Last updated 16 June 2026 04:30 AM
Manage a database of Perl packages
CPAN::MetaPackager is a small utility for building and managing a local SQLite mirror of the CPAN package index, cpan.metapackager.sqlite, by converting the canonical CPAN package-list file (02packages.details.txt.gz) into a searchable SQL database. It is useful if you need a local, machine-friendly copy of CPAN metadata for offline querying, custom tooling, packaging workflows, or fast lookups without hitting the network for every query. The module is maintained by Ron Savage under the Perl 5 license and is production-ready at version 1.00 and above. Recent releases make it easier to keep the database current by downloading the latest 02packages.details.txt.gz and rebuilding the DB automatically, and include clearer instructions and timing information during import to help you monitor updates.
CPAN-MetaCurator
Release | 16 Jun 2026 02:58 AM | Author: RSAVAGE | Version: 1.23
CPAN Testers: Pass 100.0%
Manage a database of curated Perl modules
CPAN::MetaCurator is a toolkit for building, inspecting and exporting a local SQLite database of CPAN metadata derived from Perl.Wiki and related sources, with utilities to turn that data into a jsTree-style HTML site map and other reports. It bundles modules and command-line scripts to import 02packages.details.txt or CPAN::MetaPackager databases, gather and validate module and topic statistics, search for module names, and produce web-ready exports with clickable nodes and hover text. The project is aimed at maintainers who want to curate, rebuild or publish a browsable Perl module catalogue and includes validation and parsing helpers to keep the tree accurate. The latest release rebuilt the database and rewrote the usage instructions in MetaCurator.pm to simplify rebuilding and exporting workflows.
Test-MockModule
Release | 15 Jun 2026 10:36 PM | Author: GFRANKS | Version: v0.185.3
Override subroutines in a module for unit testing
Test::MockModule lets you temporarily override subroutines in other Perl packages so you can stub or fake behavior during unit tests. It records the original routines and restores them automatically when the mock objects go out of scope or when you call unmock, which makes cleanup simple and reliable. You can use mock to replace functions with code refs or scalars, redefine to assert the function already exists, define to assert it does not, and original or original_for to call the real implementation from inside a mock. The module also offers convenience helpers such as noop to install harmless methods that return true and mock_all to catch unexpected calls, and it supports lexical strict and global-strict modes to avoid masking interface changes. It integrates with Moose and Mouse metaobjects so mocked methods participate in MOP checks but does not special-case Moo or Role::Tiny and will warn if the target class is immutable. If you need to fake exported functions, remember to mock them in the importing package or use fully qualified names to get the effect you expect.
Git-Server
Release | 15 Jun 2026 10:02 PM | Author: BBB | Version: 0.046
Secure Git Server with more granular hooks capabilities than default git
Git::Server is a drop-in replacement for a standard Git server that adds powerful, server-side control features so teams can run secure, policy-driven repositories without adopting a heavy platform. It gives fine-grained ACLs and hooks so you can restrict who can push, who can rewrite history, which files can be changed, and even whitelist IPs or author emails, while providing tools like a git-client wrapper and git-deploy to automate pushes and deployments. The module also supports flexible webhook callbacks, proxying/sync to external remotes, access logging and rotation, and a variety of deployment and compatibility fixes for older Git and non-Linux systems. Recent updates focus on reliability and operational load, running webhooks serially and retrying failed callbacks, plus improvements to the client/deploy shims and proxy sync behavior. The project is actively maintained on GitHub and is intended to be an easy replacement for ssh-based Git hosting when you need stronger hooks and access control.
Map-Metro-Plugin-Map-Berlin
Release | 15 Jun 2026 07:02 PM | Author: SREZIC | Version: 2026.0615
CPAN Testers: Pass 100.0%
Map::Metro map for Berlin
Map::Metro::Plugin::Map::Berlin is a small plugin for the Map::Metro Perl toolkit that provides a ready-made model of Berlin's transit network. It returns a parsed graph of stations and links encompassing both the U-Bahn and S-Bahn so you can perform route finding, visualization, or scripting without assembling the network data yourself. Use it via Map::Metro->new('Berlin')->parse or the map-metro.pl command line and it integrates with the rest of the Map::Metro ecosystem.
Map-Tube-Berlin
Release | 15 Jun 2026 07:00 PM | Author: SREZIC | Version: 2026.0615
Upvotes: 1 | CPAN Testers: Pass 100.0%
Interface to the Berlin S- and U-Bahn map
Map::Tube::Berlin is a lightweight Perl module that gives you a programmatic way to query Berlin's S‑ and U‑Bahn network. You create a Map::Tube::Berlin object and call get_shortest_route with a start and end station name to get back the sequence of stations along the shortest path. Station names are case insensitive and the map includes both U‑ and S‑Bahn stops. The route data comes from an XML file generated from BBBike project data and a Makefile rule is provided to rebuild the map if you have a local BBBike copy.
Business-GoCardless
Release | 15 Jun 2026 02:31 PM | Author: LEEJO | Version: 0.45
Top level namespace for the Business::GoCardless set of modules
Business::GoCardless is the top-level Perl library for talking to the GoCardless payments API, providing a collection of modules that let your app create and manage resources like payments, payouts, mandates, redirect flows and merchants while handling lower-level concerns such as webhooks, signature checking, nonce management and parameter normalization. You normally start with Business::GoCardless::Pro rather than using this module directly. The distribution aims to mirror the GoCardless API so you can work with bills, payouts, payments and related objects, and it includes conveniences and bug fixes around JSON encoding, legacy webhook handling and API compatibility. It does not implement partner account handling yet. The recent 0.45 release adds richer Mandate support including a mandate_type attribute, helper methods for common mandate kinds, new attributes for authorisation_source and next possible ACH charge date, and additional mandate status checks such as consumed, blocked and suspended_by_payer.
File-Symlink-Relative
Release | 15 Jun 2026 12:43 PM | Author: WYANT | Version: 0.006
Create relative symbolic links
File::Symlink::Relative is a small Perl module that makes it easy to create relative symbolic links by converting a given source path into a path relative to the link location and then calling Perl's symlink built-in. It exports a symlink_r function by default and provides a SYMLINK_SUPPORTED constant so you can detect whether the current platform supports symlinks. The module will still install on systems without symlink support but will throw an exception when you attempt to create a link. Use it when you want a simple, tested helper to produce relative symlinks without writing your own path manipulation code.
Encode-RAD50
Release | 15 Jun 2026 12:40 PM | Author: WYANT | Version: 0.019
CPAN Testers: Pass 100.0%
Convert to and from the Rad50 character set
Encode::RAD50 is a small Perl Encode module that converts strings to and from the vintage RAD50 character set used on PDP-11 systems such as RSX‑11, RT‑11 and RSTS. It implements Encode-compatible encode and decode operations and a PerlIO encoding layer so you can pack and unpack RAD50 data streams, where three limited characters (uppercase letters, digits, space, period and dollar) are squeezed into two bytes and invalid characters are represented by a substitution marker. The module pads inputs that are not a multiple of three with trailing spaces and will emit warnings about invalid input unless you explicitly silence them for testing, and because RAD50 is nonstandard you must explicitly load Encode::RAD50 before use. The test suite has been exercised across multiple platforms and the author maintains support via GitHub, and the most recent release (0.019) updated bug tracker and contact metadata and repackaged license files without changing functionality.
Date-ManipX-Almanac
Release | 15 Jun 2026 12:37 PM | Author: WYANT | Version: 0.004
CPAN Testers: Pass 100.0%
Add almanac date/time functionality (sunrise, etc.) to Date::Manip
Date::ManipX::Almanac extends the Date::Manip family with almanac-style date and time operations so you can ask about events like sunrise, full moon, or when a planet sets. It currently implements date-level features through Date::ManipX::Almanac::Date and serves as the top-level module in the almanac hierarchy while remaining a subclass of Date::Manip so code can test for DM5 or DM6 compatibility via isa. Recent releases were maintenance-focused, improving licensing and GitHub packaging, adding a SECURITY policy and CI workflows, and updating contact information without changing functionality. If you need astronomical event times integrated with Date::Manip, this module is relevant and issues can be reported on the project's GitHub page.
Lingua-famibeib
Release | 15 Jun 2026 09:59 AM | Author: LION | Version: v0.03
Module to interact with the famibeib language
Lingua::famibeib is the top-level Perl interface for working with famibeib, an artificial language, providing a simple entry point into the family of modules that handle parsing and manipulation. It delegates concrete tasks to companion modules like Lingua::famibeib::Text for text handling and parsing, Lingua::famibeib::Sentence for sentence-level actions, and Lingua::famibeib::Word for word-level operations, and it inherits behavior from Data::Identifier::Interface::Known. Use this module if you need to parse, analyze, or generate famibeib content from Perl code and want a convenient hub that connects to the higher-level components you will actually use.
Test-MixedScripts
Release | 15 Jun 2026 07:27 AM | Author: RRWO | Version: v0.6.5
Test text for mixed and potentially confusable Unicode scripts
Test::MixedScripts helps you catch potentially malicious or confusing Unicode in source and text files by checking that the characters used belong only to an expected set of Unicode scripts. It provides file_scripts_ok to validate a specific file and all_perl_files_scripts_ok to scan the Perl files in a distribution, defaulting to Common and Latin but allowing overrides per file, per line with a special comment, or for larger sections via a POD directive. The module reports the unexpected script together with the character name and the exact file, line and character position to make fixes straightforward. It can also be asked to enforce strict ASCII and will skip or warn when asked to test scripts not supported by your Perl build. This requires Perl 5.16 or later and does not try to detect confusable characters that come from the same script. The project is maintained on GitHub and recent releases added ASCII testing and a number of documentation and test-suite improvements.
System Calls for File IO, Sockets, Time, Process, Signals, Users
SPVM::Sys is a comprehensive, cross-platform system interface for SPVM that exposes POSIX-style operations for file I/O, directories and stat, sockets, time, process control, signals, environment variables and user/group queries, with many convenience methods that mirror Perl idioms like the -X file tests. It wraps low level calls such as open/read/write, sysopen/sysread/syswrite, socket/connect/accept, fork/exec/wait and utime while providing supporting classes for socket addresses, timeval/timespec, directory and file streams and more. Windows Unicode is handled automatically by converting between SPVM strings and UTF-16 filenames so you can use the same APIs on Windows and Unix, and the distribution includes utilities such as globbing, portable TCP keepalive configuration and environment manipulation. Recent updates added MSVC build support, improved Sys#glob for UTF-8 and Windows Unicode case folding, and enhanced set_tcp_keepalive with an optional interval parameter while fixing several Windows and memory bugs, so this is a good fit if you need low-level, portable system primitives from SPVM code.
Minion-Backend-mysql
Release | 15 Jun 2026 01:36 AM | Author: PREACTION | Version: 1.008
MySQL backend
Minion::Backend::mysql is a MySQL storage backend for the Minion job queue that plugs into Mojolicious apps and uses Mojo::mysql to persist jobs, schedules and worker state. It creates the necessary tables automatically via migrations and provides the full Minion API for enqueuing, dequeuing, retries, priorities, dependencies, scheduled jobs, worker registration and job metadata, so you can manage background tasks with familiar Minion primitives. The backend includes a prefetch cache to improve throughput when jobs are short and lets you tune cache size and expiry. It requires MySQL 5.6.5 or later and may need extra privileges when installing on MySQL 8 if binary logging is enabled, which can block the database migrations. If you use Minion with MySQL and Mojolicious this module is the ready-made connector to store and dispatch your background work.
Net-HTTP2-nghttp2
Release | 15 Jun 2026 01:04 AM | Author: JJNAPIORK | Version: 0.008
Perl XS bindings for nghttp2 HTTP/2 library
Net::HTTP2::nghttp2 is a Perl XS wrapper around the mature nghttp2 C library that brings full HTTP/2 support to Perl programs, letting you build both clients and servers that use streams, header compression, server push, and flow-controlled streaming bodies. It exposes a session-based API with callbacks for headers, data, and stream events so you can handle requests and responses incrementally and implement features like large uploads, streaming downloads, and WebSocket bootstrapping over HTTP/2 (RFC 8441). The module requires the nghttp2 library to be installed and offers an available method to check that linkage, and users can simplify installation via Alien::nghttp2. It has been conformance tested against h2spec with a high pass rate and documents a few intentional, lenient behaviors inherited from nghttp2 that improve interoperability rather than strict RFC enforcement. If you need production-ready HTTP/2 primitives in Perl and are comfortable wiring socket or TLS I/O into a callback loop, this module gives you a direct, low-level bridge to a widely used C implementation.
Alien-nghttp2
Release | 15 Jun 2026 12:48 AM | Author: JJNAPIORK | Version: 0.003
Find or build the nghttp2 HTTP/2 C library
Alien::nghttp2 provides a simple way for Perl modules to use the nghttp2 HTTP/2 C library by detecting a system install or downloading and building the library for you. It exposes standard Alien::Base methods to return compiler flags, linker flags, dynamic library paths and the install type so you can easily populate Makefile.PL or Alien::Build arguments when building XS code or other native extensions. nghttp2 is a production-grade HTTP/2 and HPACK implementation used by projects like curl and Firefox, so this module is handy whenever a Perl distribution needs to link against an established HTTP/2 client library. Use Alien::nghttp2 to avoid manual dependency management and to make builds more portable across systems.
URI
Release | 14 Jun 2026 11:05 PM | Author: OALDERS | Version: 5.35
Upvotes: 121 | CPAN Testers: Pass 100.0%
Uniform Resource Identifiers (absolute and relative)
URI is a general purpose Perl class for creating, parsing and manipulating Uniform Resource Identifiers according to the RFCs, letting you build absolute or relative URIs, combine them with base URIs, and convert them to and from plain strings or Unicode IRIs. It exposes simple accessors to get and set components like scheme, authority, host, port, path, query and fragment, plus convenience helpers to canonicalize and compare URIs, turn relative URIs into absolute ones and vice versa, and work with query data using form- and keyword-oriented methods. The module dispatches to scheme-specific subclasses when available so you get extra methods for common schemes such as http, https, ftp, file, mailto, ldap, ws and many others, and it knows about default ports, IDNA host handling and percent-encoding rules. It is stable and widely used but the author notes a couple of quirks to watch for such as odd behavior when passing regexp variables like $1 directly to accessors and the way non-ASCII bytes are percent-encoded depending on a string s internal UTF8 flag. If you need a robust, RFC-aware URI toolkit in Perl for building, normalizing or dissecting URIs this module is a solid choice.
Lemonldap-Portal-Standard
Favorite | 14 Jun 2026 09:45 PM | Author: EGERMAN | Version: 3.2.1
Upvotes: 1 | CPAN Testers: Pass 100.0%
Perl extension for the Lemonldap SSO system
Lemonldap::Portal::Standard is a Perl module that implements the authentication workflow for the Lemonldap single sign on system and provides a ready-made LDAP-backed form login handler. It drives the whole login cycle from request and timeout handling to form validation, optional user ID formatting, LDAP connect/bind/search, session construction and final credential validation, and each step can be overridden with custom callbacks. You instantiate it with new and call process with CGI-like parameters and LDAP settings, and it supports anonymous binds by leaving the manager credentials undefined. Helper methods return error codes and messages, session data and redirection URLs and the module uses a specific nonfatal code for an initial empty form so you can distinguish that case. The component is GPLv2 licensed and is useful when you need an extensible, production-ready LDAP authentication layer for a web SSO setup.
Finance-Bank-Bankwest
Favorite | 14 Jun 2026 09:36 PM | Author: LXP | Version: 1.2.8
Upvotes: 1 | CPAN Testers: Pass 100.0%
Check Bankwest accounts from Perl
Finance::Bank::Bankwest is a Perl library for programmatically logging into Bankwest Online Banking with a Personal Access Number and access code so you can list accounts, read balances and fetch transaction histories via a returned Session object. It exposes account and transaction objects with useful helpers so scripts can report balances and iterate transactions easily. This is an unofficial third‑party client so you should audit the code and check Bankwest’s terms before using it in production because Bankwest does not support this module. The project is maintained on GitHub and recent updates improved robustness by skipping post‑login service‑message pages automatically and by tolerating missing transaction codes in some responses. The module is free software licensed under the same terms as Perl.
Crypt-DSA
Release | 14 Jun 2026 07:55 PM | Author: TIMLEGGE | Version: 1.21
CPAN Testers: Pass 100.0%
DSA Signatures and Key Generation
Crypt::DSA is a pure-Perl implementation of the Digital Signature Algorithm that provides key generation, signing and signature verification with the heavy numeric work delegated to Math::Pari. You create a Crypt::DSA object, generate a keypair (you must pick the p size, with q and g fixed at 160 bits), sign either a message or an explicit 20-byte digest (the module will SHA1 the message for you) and verify signatures using the public key; the API is intentionally similar to Crypt::RSA and returns Crypt::DSA::Key and Crypt::DSA::Signature objects. Important security notes: DSA is no longer recommended for new systems and this module is marked deprecated in favor of alternatives such as Crypt-DSA-GMP, so use it only to verify legacy signatures. Recent releases fixed critical issues including a nonce reuse flaw (CVE-2026-12205) that could allow private-key recovery if the same key was used to sign multiple messages with affected versions, so any keys used to sign more than once with those versions should be considered compromised.
Apertur-SDK
Release | 14 Jun 2026 04:37 PM | Author: APERTUR | Version: 0.16
Official Perl SDK for the Apertur API
Apertur::SDK is the official Perl client for the Apertur API that simplifies common tasks like creating upload sessions, uploading images (including optional encrypted uploads), long polling for processing results, verifying webhook signatures, and performing CRUD on destinations, API keys, webhooks and encryption keys. It supports both API key and OAuth token authentication and will auto-select the sandbox environment when given a test key prefix, so you can develop safely. Errors are thrown as typed exception objects to make handling authentication, validation and rate limit problems straightforward. Encryption features are provided but require optional crypto modules which are loaded only when needed. If you build Perl applications that interact with Apertur for image ingestion or delivery workflows this SDK gives a convenient, ready-made interface.
Perl program for Japanese character code conversion
Jacode is a compact Perl library for detecting and converting Japanese text between common encodings such as JIS, EUC, Shift_JIS and UTF-8, with support for newer JIS X 0213 planes and utilities to inspect escape sequences and encoding boundaries. It exposes simple routines like convert to transcode a scalar in place, getcode to guess the encoding of a buffer, and helpers to examine JIS in/out escape states, and on modern Perls it can act as a wrapper around Encode when asked to handle other encodings. The module is written to be broadly compatible with older Perl releases while staying usable on current Perls and includes extensive tests and documentation. A recent maintenance update simplified the UTF-8 source-file self-check so it no longer uses Perl‑5‑only syntax and added a small safeguard to suppress a spurious apostrophe-package-separator warning on very new Perls, improving backward and forward compatibility.
Config-IniFiles
Release | 14 Jun 2026 03:22 PM | Author: SHLOMIF | Version: 3.002000
A module for reading .ini-style configuration files
Config::IniFiles is a mature Perl utility for reading, editing and writing human-friendly INI-style configuration files. It gives both an object API and a tied-hash interface so you can fetch and set values by section and parameter, handle multi-line values and here-doc style blocks, preserve and manage comments and trailing comments, use default or fallback sections, toggle case sensitivity, and import or overlay one configuration on top of another with optional delta-only writes for compact site-specific files. The module accepts filenames, filehandles or scalar refs and includes helpers to add, copy, rename or delete sections and to write the configuration back to disk. Recent maintenance includes a security fix addressing CVE-2026-11527 in version 3.001000. Be aware that WriteConfig may not preserve original comment placement perfectly and does not perform file locking, so applications that write concurrently should take care.
Data-Identifier
Release | 14 Jun 2026 03:19 PM | Author: LION | Version: v0.30
Format independent identifier object
Data::Identifier provides a single, format‑independent object for working with many kinds of identifiers such as UUIDs, OIDs, URIs, Wikidata and FactGrid IDs, GTIN, IBAN, BIC, DOI and others, letting you keep both the raw value and its type while offering normalization and basic deduplication. It can create identifiers from strings or from other objects, produce canonical forms (UUID, OID, URI or a combined ISE form), generate high quality random identifiers from a variety of sources, compare and sort identifiers, and convert them into related objects for use with URI and tagging libraries or file and datecode modules. The module supports type-level options like validation patterns, namespaces and generators, returns user-friendly display names or permanent tagnames for UI use, and lets you register frequently used identifiers to improve performance. Validation and deduplication aim for practicality and speed so they may not catch every invalid value and deduplication is not guaranteed to merge all equal identifiers. Some features are marked experimental and you can disable OID support to gain speed if you do not need it.
Mac-Pasteboard
Release | 14 Jun 2026 11:23 AM | Author: WYANT | Version: 0.106
Manipulate Mac OS X pasteboards
Mac::Pasteboard provides a Perl interface to macOS pasteboards and the system clipboard, letting scripts and programs read and write clipboard data. It offers simple exported helpers pbpaste and pbcopy for plain text and a full object-oriented API to work with named pasteboards, individual pasteboard items and Uniform Type Identifier flavors so you can store or retrieve different data types and inspect flavor flags and tags. The module includes optional encoding handling for several text UTIs, taint-aware behavior, error/status reporting and a set of constants for common pasteboard errors and flags. Note that it requires macOS 10.3 or later, currently only accesses the first item on multi-item pasteboards, does not support promised data, and some encoding behavior may be unreliable on older macOS or Perl versions. If you need programmatic clipboard control on macOS from Perl, this module supplies a practical and featureful toolkit.
HTML-TableContentParser
Release | 14 Jun 2026 11:19 AM | Author: WYANT | Version: 0.306
CPAN Testers: Pass 100.0%
Extract tables from HTML
HTML::TableContentParser is a small utility for pulling the contents of HTML tables into simple Perl data structures so you can work with rows, cells and headers without writing a full DOM scraper. You create a parser and call parse($html) to get an array reference of tables found in document order, and each table is returned as a hashref containing attributes plus useful keys like caption, headers and rows where each row lists its cells and any th/header entries with their text in a data field. There is a classic option to preserve older behavior for <th> handling if you need backward compatibility. The module intentionally ignores rowspan and colspan and nested tables are reported separately rather than being linked into their parent cell, but recent maintenance releases fixed nested-table truncation and improved row-header (<th>) support along with metadata and test updates.
Games-Sudoku-General
Release | 14 Jun 2026 11:15 AM | Author: WYANT | Version: 0.028
CPAN Testers: Pass 100.0%
Solve Sudoku and related puzzles
Games::Sudoku::General is a Perl module for solving and generating Sudoku-style puzzles with flexible rules and layouts. Instead of assuming a square grid it lets you define arbitrary topologies so you can handle standard 9x9 Sudoku, Latin squares, Samurai (quincunx), cube variants, odd/even or high/low constraints, and many custom designs, and you can define custom symbol sets and multi-character symbols. It can both generate puzzles with controllable difficulty and constraints and solve given puzzles while also producing a human-readable trace of the solving steps so you can see which logical rules produced each placement. Generation is heuristic and not guaranteed to succeed and very exotic constraints called X, Y, and W are not implemented as dedicated rules though the solver will fall back to backtracking when needed. Clipboard copy and paste require the Clipboard module. If you need a general, extensible Sudoku engine in Perl that explains its reasoning and supports nonstandard puzzles, this module is a good fit.
Game-Life-Faster
Release | 14 Jun 2026 11:10 AM | Author: WYANT | Version: 0.008
CPAN Testers: Pass 100.0%
Play John Horton Conway's Game of Life, hopefully faster than a naive implementation
Game::Life::Faster is a Perl implementation of Conway's Game of Life that focuses on speed and low memory use for large, mostly empty grids. It exposes a Game::Life-like API so you can create rectangular grids, tweak birth and survival rules, place or toggle patterns, run iterations, and get text or region-limited representations of the grid. Under the hood it uses a hash-based grid and change bookkeeping to avoid autovivifying unused cells and to limit processing to active areas, and recent releases added efficient used/active-region queries and an executable script with load and pause options. If you need a faster, more memory-efficient Game of Life engine in Perl for sparse simulations this module is a good fit, while noting a few small incompatibilities with Game::Life such as scalar get_text_grid returning a single string and place_points ignoring undef values.
Bilingual Shell for cmd.exe and bash in one script
BATsh is a pure-Perl bilingual shell that lets you write and run files containing both Windows cmd.exe batch syntax and Unix sh/bash syntax in the same script, with the interpreter switching modes line by line and sharing variables via BATsh::Env. You can run script files, evaluate shell source strings, or use an interactive REPL, and the implementation supports common builtins, pipelines, I/O redirection, functions, control flow, batch parameters and many familiar cmd and sh features so most cross-platform scripting patterns work inside Perl without launching an external shell. Only non-built-in programs are executed via the host operating system so commands like FINDSTR, SORT or other platform-specific utilities require the corresponding executable to be present. The SH side omits arrays, brace expansion, tilde expansion and several advanced shell features, and the CMD side has a few unimplemented FOR /F variants and some subtle differences in block expansion and scope because parenthesised groups do not create isolated subshells. BATsh is suitable when you need a single, portable interpreter that mixes Windows and Unix shell idioms directly in Perl and are willing to accept the noted limitations for the convenience of a unified, pure-Perl solution.
Plack-Middleware-Security-Simple
Release | 14 Jun 2026 09:17 AM | Author: RRWO | Version: v0.13.2
CPAN Testers: Pass 100.0%
A simple security filter for Plack
Plack::Middleware::Security::Simple is a lightweight Plack middleware that lets PSGI applications block obvious attack patterns by matching request environment fields against simple rules. Rules can be provided as an array reference of key/regex pairs, a Hash::Match object, or a custom subroutine that inspects the Plack environment, so you can block things like bad user agents or requests for CGI and PHP paths. When a rule matches a default handler logs the event to psgix.logger and returns a configurable HTTP status (400 by default), and you can replace the handler to customize the response or raise HTTP exceptions. This module is useful when you want an easy in-application filter for common probes and malicious requests, and it requires Perl 5.14 or newer; for more comprehensive filtering you may prefer a reverse proxy solution such as modsecurity.