NAME

Mojo::Base - Once Upon A Midnight Dreary!

SYNOPSIS

package Car;
use base 'Mojo::Base';

__PACKAGE__->attr('driver');
__PACKAGE__->attr('doors', default => 2);
__PACKAGE__->attr([qw/passengers seats/],
    chained => 1,
    default => sub { 2 }
);
__PACKAGE__->attr('trailer', weak => 1);

package main;
use Car;

my $bmw = Car->new;
print $bmw->doors;
print $bmw->passengers(5)->doors;

my $mercedes = Car->new(driver => 'Sebastian');
print $mercedes->passengers(7)->passengers;

$mercedes->trailer(Trailer->new);

DESCRIPTION

Mojo::Base is a base class containing simple and fast helpers for object oriented Perl programming. Main design goals are minimalism and staying out of your way. The syntax is a bit like Ruby and the performance better than Class::Accessor::Fast.

Note that this is just an accessor generator, take Moose if you are looking for an object system.

For debugging you can set the MOJO_BASE_DEBUG environment variable.

METHODS

new

my $instance = BaseSubClass->new;
my $instance = BaseSubClass->new(name => 'value');
my $instance = BaseSubClass->new({name => 'value'});

attr

__PACKAGE__->attr('name');
__PACKAGE__->attr([qw/name1 name2 name3/]);
__PACKAGE__->attr('name', chained => 1, default => 'foo');
__PACKAGE__->attr(name => (chained => 1, default => 'foo'));
__PACKAGE__->attr('name', {chained => 1, default => 'foo'});
__PACKAGE__->attr([qw/name1 name2 name3/] => {
    chained => 1,
    default => 'foo'}
);

Currently there are three options supported.

chained: Whenever you call an attribute with arguments the instance
         is returned instead of the value.
default: Default value for the attribute, can also be a coderef.
         Note that the default value is "lazy", which means it only
         gets assigned to the instance after the attribute has been
         called.
weak:    Weakens the attribute value.