Mo - Micro Objects. Mo is less.
package Less;
use Mo;
extends 'Nothing';
has something => ();use Mo. Mo is less. Much less.
Moose is huge. Moose led to Mouse led to Moo led to Mo. M is nothing. Mo is more. Not much.
When Moo is more than you need, drop an 'o' and get some Mo.
To get just a little Mo from Mo, use "Mo Features" below.
This is what you get. Nothing Mo.
newmethod-
Mo provides a
newobject constructor. You pass it a list of name/value pairs and it returns a new object.Constructor will not call BUILD methods. This is available using the Mo::build feature.
extends-
Mo exports the
extendskeyword, to declare your parent class.Mo::Objectitself is your default parent class.Mo only supports single inheritance. If you need multiple inheritance or roles, you should upgrade to Moo.
has-
Mo exports a
haskeyword, to generate accessors.These accessors always support both
getandsetoperations. That's it.has name => (); has thing => (foo => 'bar'); # arguments silently ignoredAll arguments passed to
hasare ignored. This makes it easier to switch between Mo and Moo, without having to change all your accessors. strictandwarnings-
Mo turns on
use strictanduse warningsfor you. - Embeddable
-
Mo is tiny. It is compressed into a single line. You can easily inline it in your code, should you want to do that. See Mo::Inline for more information, including a utility that will do it for you.
Mo is the bare minimum needed for Perl OO. Many times you'll want just a couple more features. Don't worry. Mo's got you covered:
use Mo qw'build default builder coerce is required';
has name1 => ( default => sub { 'Joe' } );
has name2 => ( builder => 'name_builder' );
has name3 => ( coerce => sub {$_[0]} );
has name4 => ( is => 'ro' );
has name4 => ( required => 1 );
sub BUILD {
my $self = shift;
...
}Mo simply loads the feature classes Mo::build, Mo::default, Mo::builder, Mo::coerce, Mo::is and Mo::required. The first one supports BUILD constructing and the other three add their magics to has. A Mo::Feature module can enhance new, extends and has, and also add new export subs, or remove existing ones. Features can also be combined for a single accessor. See Mo::Features for a list of all the features and for an explanation of the Feature API..
Ingy döt Net <[email protected]>
Damien 'dams' Krotkine <[email protected]>
Matt S. Trout (mst) <[email protected]>
Christian Walde <[email protected]>
Alessandro Ranellucci (aar/alexrj) <[email protected]>
Carlos Lima (priodev) <[email protected]>
Copyright (c) 2011-2016. Ingy döt Net.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
