I just released version 5 of Venus, (vns (https://github.com/usevenus/vns) on GitHub), along with two companion repos:
- bye: (https://github.com/usevenus/bye) An introduction to Venus by example
- cfu: (https://github.com/usevenus/cfu) A set of Claude Code instructions for writing Perl using Venus ideas and primitives
Venus is opinionated but pragmatic. The goal has always been to give modern Perl 5 developers a cohesive set of modern primitives for data modeling, validation, error handling, roles, CLI tooling, and functional-style helpers, without abandoning Perl idioms or core sensibilities.
v5 is the largest release so far and includes both new features and some intentional breaking changes to clean up long-standing design constraints.
Highlights from v5.01:
- First class support for private instance data
- Thoroughly documented type system and parser, see Venus::Type (https://metacpan.org/pod/Venus::Type), Venus::Check (https://metacpan.org/pod/Venus::Check)
- New core utilities: Venus::Map (https://metacpan.org/pod/Venus::Map), Venus::Set (https://metacpan.org/pod/Venus::Set), Venus::Range (https://metacpan.org/pod/Venus::Range), Venus::Collect (https://metacpan.org/pod/Venus::Collect), Venus::Result (https://metacpan.org/pod/Venus::Result)
- Myriad ways to validate data, e.g., Venus::Data (https://metacpan.org/pod/Venus::Data), Venus::Validate (https://metacpan.org/pod/Venus::Validate), and Venus::Schema (https://metacpan.org/pod/Venus::Schema)
- Improved error and fault handling with Venus::Error (https://metacpan.org/pod/Venus::Error), Venus::Try (https://metacpan.org/pod/Venus::Try), and Resultable roles
- Keyword functions like gets (https://metacpan.org/pod/Venus#gets), sets (https://metacpan.org/pod/Venus#sets), mask (https://metacpan.org/pod/Venus#mask), kvargs (https://metacpan.org/pod/Venus#kvargs), unpack (https://metacpan.org/pod/Venus#unpack), and cli (https://metacpan.org/pod/Venus#cli)
- Refactored container and factory model (i.e., dependency injection)
- Method modifiers, lifecycle hooks, coercion-by-type, and richer role composition
- A much more capable CLI framework with routing, dispatching, and spec-driven configuration
- Better configuration handling, including support for .env files and multiline environment variables
- Significant internal refactors to simplify extension and documentation
- Overhauled test framework with more features, automation, and POD generation
This project is very much for people who still like Perl, want stronger structure, and prefer libraries that help you model intent rather than just shuffle data.
Feedback, criticism, and questions are all welcome. If nothing else, I hope it sparks some interesting discussion about what "modern Perl" can look like today.
Top comments (0)