Defaults::Modern - Yet another approach to modernistic Perl
use Defaults::Modern; # Function::Parameters + List::Objects::WithUtils + types -> fun to_immutable ( (ArrayRef | ArrayObj) $arr ) { # blessed() and confess() are available (amongst others): my $immutable = immarray( blessed $arr ? $arr->all : @$arr ); confess 'No items in array!' unless $immutable->has_any; $immutable } package My::Foo { use Defaults::Modern; # define keyword for defining constants -> define ARRAY_MAX = 10; # Moo(se) with types -> use Moo; use MooX::late; has myarray => ( isa => ArrayObj, is => 'ro', writer => '_set_myarray', # MooX::late allows us to coerce from an ArrayRef: coerce => 1, default => sub { [] }, ); # Method with optional positional param and implicit $self -> method slice_to_max (Int $max = -1) { my $arr = $self->myarray; $self->_set_myarray( $arr->sliced( 0 .. $max >= 0 ? $max : ARRAY_MAX ) ) } } # Optionally autobox list-type refs via List::Objects::WithUtils -> use Defaults::Modern 'autobox_lists'; my $obj = +{ foo => 'bar', baz => 'quux' }->inflate; my $baz = $obj->baz; # See DESCRIPTION for complete details on imported functionality.
Yet another approach to writing Perl in a modern style.
. . . also saves me extensive typing ;-)
When you use Defaults::Modern, you get:
use Defaults::Modern
strictures (version 2), which enables strict and makes most warnings fatal; additionally bareword::filehandles and indirect method calls are disallowed explicitly (not just in development environments)
The v5.14 feature set (state, say, unicode_strings, array_base) -- except for switch, which is deprecated in newer perls
v5.14
state
say
unicode_strings
array_base
switch
carp, croak, and confess error reporting tools from Carp
blessed, reftype, and weaken utilities from Scalar::Util
All of the List::Objects::WithUtils object constructors (array, array_of, immarray, immarray_of, hash, hash_of, immhash, immhash_of)
fun and method keywords from Function::Parameters
The full Types::Standard set and List::Objects::Types -- useful in combination with Function::Parameters (see the "SYNOPSIS" and Function::Parameters POD)
try and catch from Try::Tiny
The path object constructor from Path::Tiny and related types/coercions from Types::Path::Tiny
maybe and provided definedness-checking syntax sugar from PerlX::Maybe
A define keyword for defining constants based on PerlX::Define
The |M| match operator from match::simple
The sswitch and nswitch switch/case constructs from Switch::Plain
true.pm so you can skip adding '1;' to all of your modules
If you want to automatically load (shown here with the '-all' import tag, as well) and register other Type::Registry compatible libraries (see Type::Library), they can be specified at import time:
use Defaults::Modern -all, -with_types => [ 'Types::Mine' ],
This feature is unnecessary with Type::Tiny version 1.x and higher, which will automatically register Type::Library-based types in the caller's Type::Registry.
If you import the tag autobox_lists, ARRAY and HASH type references are autoboxed via List::Objects::WithUtils:
autobox_lists
use Defaults::Modern 'autobox_lists'; my $itr = [ 1 .. 10 ]->natatime(2);
Moo and MooX::late are depended upon in order to guarantee their availability, but not automatically imported:
use Defaults::Modern; use Moo; use MooX::late; has foo => ( is => 'ro', isa => ArrayObj, coerce => 1, default => sub { [] }, );
(If you're building classes, you may want to look into namespace::clean / namespace::sweep or similar -- Defaults::Modern imports an awful lot of Stuff. Moops may be nicer to work with.)
This package just glues together useful parts of CPAN, the most visible portions of which come from the following modules:
Carp
Function::Parameters
List::Objects::WithUtils and List::Objects::Types
match::simple
Path::Tiny
PerlX::Maybe
Scalar::Util
Switch::Plain
Try::Tiny
Types::Standard
Type::Tiny
Jon Portnoy <avenj@cobaltirc.org>
Licensed under the same terms as Perl.
Inspired by Defaults::Mauke and Moops.
The code backing the define keyword is forked from TOBYINK's PerlX::Define to avoid the Moops dependency and is copyright Toby Inkster.
To install Defaults::Modern, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Defaults::Modern
CPAN shell
perl -MCPAN -e shell install Defaults::Modern
For more information on module installation, please visit the detailed CPAN module installation guide.