Threaded Perl image with curated CPAN modules for scripting, data, DB, testing, and web.
9.6K
perl-essentials extends the official Perl images with a curated,
production-oriented CPAN stack commonly required for automation, data
processing, reporting, database access, testing, profiling, and web
integrations.
Source and complete documentation: https://github.com/M-M-M-M/perl-essentials
Published images run by default as the non-root perl user with UID/GID
1000:1000. For writable host bind mounts, pass
--user "$(id -u):$(id -g)" to preserve host ownership. Use --user root
only for explicit administrative operations.
Bind mounts retain numeric host ownership. A host UID/GID may therefore be
displayed under a different name inside the container while remaining correct
on the host; no chown is needed. The global Zsh configuration applies to all
users, and a minimal personal .zshrc prevents the new-user assistant without
overwriting custom settings.
Codex uses Bubblewrap for its Linux sandbox. Ubuntu 24.04 hosts may require the
distribution bwrap-userns-restrict AppArmor profile before the sandbox can
configure non-root user and network namespaces.
Local linux/amd64 validation on Apple Silicon Docker Desktop runs through
emulation; a Codex SeccompInstall/Invalid argument sandbox failure there is
handled as a documented local smoke-test limitation, while native CI keeps the
sandbox validation strict.
docker run --rm perlessentials/perl-essentials:5.45 \
perl -MDBI -MJSON -e 'print "ready\n"'
docker run --rm -it --user "$(id -u):$(id -g)" \
-v "$PWD":/work \
perlessentials/perl-essentials:5.45
docker run --rm -it --user "$(id -u):$(id -g)" \
-v "$PWD":/work \
-v "$PWD/codex-auth":/codex \
perlessentials/perl-essentials:codex zsh -l
docker run --rm perlessentials/perl-essentials:5.26 perl -e 'print "$^V\n"'
The image includes perltidy, perlcritic, prove, cpanm, rg,
parallel, hyperfine, and the GNU-prefixed commands gcat, gfind,
ggrep, and gsed.
Perl::Tidy uses /etc/perltidyrc by default. A project-local .perltidyrc
under /work takes precedence. Use -pro=/work/custom.perltidyrc to select a
specific profile, or -npro to ignore all profiles.
Preview formatting without modifying the mounted file:
docker run --rm --user "$(id -u):$(id -g)" -v "$PWD":/work \
perlessentials/perl-essentials:5.45 \
perltidy -st -se /work/path/to/script.pl
Format in place without creating a backup, using the host user to preserve file ownership:
docker run --rm --user "$(id -u):$(id -g)" -v "$PWD":/work \
perlessentials/perl-essentials:5.45 \
perltidy -b -bext='/' /work/path/to/script.pl
| Perl series | Image version | Role |
|---|---|---|
| 5.26 | 5.26.3 | Legacy baseline |
| 5.32 | 5.32.1 | Broad legacy compatibility |
| 5.36 | 5.36.3 | Common LTS distributions |
| 5.38 | 5.38.5 | Established production series |
| 5.40 | 5.40.5 | Maintained stable series |
| 5.42 | 5.42.3 | Previous stable series |
| 5.44 | 5.44.0 | Latest stable series |
| 5.45 | 5.45.2 | Development compatibility |
A codex target is also available, based on the Perl 5.45.2 image:
| Target | Perl base | Codex CLI | RTK | Publication |
|---|---|---|---|---|
codex | 5.45.2 | Latest at no-cache build; 0.149.1 observed 2026-08-24 09:35:05 | Latest at no-cache build; 0.45.0 observed 2026-08-24 09:35:05 | codex, release, and timestamp tags |
Versions captured on 2026-08-24 09:35:05 (UTC).
This inventory was captured from the default image at the
timestamp above. Module versions may differ between publication runs. For an
exact image, see /opt/perl-essentials/module-versions.txt.
| Module | Version |
|---|---|
Archive::Zip | 1.68 |
Archive::Zip::MemberRead | 1.68 |
Array::Compare | 3.0.8 |
Cpanel::JSON::XS | 4.43 |
Cwd | 3.95 |
DBD::SQLite | 1.78 |
DBI | 1.652 |
Data::Dumper | 2.192 |
Data::Peek | 0.54 |
Date::Calc | 6.4 |
DateTime | 1.66 |
DateTime::Format::Excel | 0.31 |
DateTime::Format::ISO8601 | 0.19 |
Devel::NYTProf | 6.15 |
Digest::SHA | 6.04 |
Encode | 3.24 |
Excel::Writer::XLSX | 1.15 |
Excel::Writer::XLSX::Utility | 1.15 |
File::Copy | 2.43 |
File::Path | 2.18 |
File::Spec | 3.95 |
File::Temp | 0.2312 |
File::Which | 1.27 |
Getopt::Long | 2.58 |
HTTP::Cookies | 6.12 |
HTTP::Request::Common | 7.04 |
I18N::Langinfo | 0.24 |
IO::Pty | 1.31 |
Imager | 1.035 |
JSON | 4.11 |
JSON::Lines | 1.11 |
JSON::MaybeXS | 1.004008 |
JSON::PP | 4.18 |
JSON::XS | 4.04 |
LWP::UserAgent | 6.83 |
List::MoreUtils | 0.430 |
List::Util | 1.70 |
MIME::Base64 | 3.16_01 |
MIME::Lite | 3.038 |
MIME::Parser | 5.517 |
Math::Units | 1.3 |
Mojolicious::Lite | 9.49 |
Net::LDAP | 0.68 |
Net::SFTP::Foreign | 1.93 |
Perl::Critic | 1.156 |
Perl::Tidy | 20260808 |
Scalar::Util | 1.70 |
Schedule::RateLimiter | 0.01 |
Sort::Key | 1.33 |
Spreadsheet::XLSX | 0.18 |
Test::MockModule | 0.185.3 |
Test::More | 1.302222 |
Text::CSV | 2.06 |
Text::Iconv | 1.7 |
Thread::Queue | 3.14 |
Time::Duration | 1.21 |
Time::HiRes | 1.9781 |
Time::Limit | 0.003 |
URI::Escape | 5.36 |
XML::Hash | 0.95 |
XML::LibXML | 2.0213 |
XML::LibXML::XPathContext | 2.0213 |
threads | 2.46 |
threads::shared | 1.74 |
utf8 | 1.29 |
utf8::all | 0.026 |
DateTime::Locale | 1.45 |
DBD::Pg | 3.21.1 |
REST::Client | 281 |
XML::XML2JSON | 0.06 |
Content type
Image
Digest
sha256:d0a98800f…
Size
429.4 MB
Last updated
24 days ago
docker pull perlessentials/perl-essentials:v0.9.4-5.45.2