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; has myarray => ( is => 'ro', isa => ArrayObj, writer => '_set_myarray', coerce => 1, builder => 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 (and Switch::Plain is provided anyway).
v5.14
state
say
unicode_strings
array_base
switch
experimental warnings are also disabled on v5.18+.
experimental
v5.18+
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 configured to accept Type::Tiny types (amongst other reasonably sane defaults including arity checks)
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
The qc, qcw, and qc_to code-interpolating keywords from Quote::Code (as of Defaults::Modern v0.11.1)
v0.11.1
true.pm so you can skip adding '1;' to all of your modules
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 version 2+ is depended upon in order to guarantee availability, but not automatically imported:
use Defaults::Modern; use Moo; use MooX::TypeTiny; # recommended for faster inline type checks 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:
use Defaults::Modern; use Moo; use namespace::clean; # ...
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
Quote::Code
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.