NAME
Evo::Base
VERSION
version 0.0153
SYNOPSIS
package Cat;
use Evo::Base -base;
has name => 'Nyan';
has [qw(birds mice)] => 2;
package Tiger;
use Evo::Base 'Cat';
has friend => sub { Cat->new };
has stripes => 42;
package main;
use Evo::Base -strict;
my $mew = Cat->new(name => 'Longcat');
say $mew->mice;
say $mew->mice(3)->birds(4)->mice;
my $rawr = Tiger->new(stripes => 23, mice => 0);
say $rawr->tap(sub { $_->friend->name('Tacgnol') })->mice;
DESCRIPTION
Evo::Base is a simple base class for Evo projects.
# Automatically enables "strict", "warnings", "utf8" and Perl 5.10 features
use Evo::Base -strict;
use Evo::Base -base;
use Evo::Base 'SomeBaseClass';
All three forms save a lot of typing.
# use Evo::Base -strict;
use strict;
use warnings;
use utf8;
use feature (':5.20');
use experimental qw(signatures postderef);
use IO::Handle ();
# use Evo::Base -base;
use strict;
use warnings;
use utf8;
use feature (':5.20');
use experimental qw(signatures postderef);
use IO::Handle ();
use Evo::Base;
push @ISA, 'Evo::Base';
sub has { Evo::Base::attr(__PACKAGE__, @_) }
# use Evo::Base 'SomeBaseClass';
use strict;
use warnings;
use utf8;
use feature (':5.20');
use experimental qw(signatures postderef);
use IO::Handle ();
require SomeBaseClass;
push @ISA, 'SomeBaseClass';
use Evo::Base;
sub has { Evo::Base::attr(__PACKAGE__, @_) }
NAME
Evo::Base - Minimal base class. Almost copypast from Mojo::Base Will be changed to Moo in the future
FUNCTIONS
Evo::Base implements the following functions, which can be imported with the -base
flag or by setting a base class.
has
has 'name';
has [qw(name1 name2 name3)];
has name => 'foo';
has name => sub {...};
has [qw(name1 name2 name3)] => 'foo';
has [qw(name1 name2 name3)] => sub {...};
Create attributes for hash-based objects, just like the "attr" method.
METHODS
Evo::Base implements the following methods.
attr
$object->attr('name');
SubClass->attr('name');
SubClass->attr([qw(name1 name2 name3)]);
SubClass->attr(name => 'foo');
SubClass->attr(name => sub {...});
SubClass->attr([qw(name1 name2 name3)] => 'foo');
SubClass->attr([qw(name1 name2 name3)] => sub {...});
Create attribute accessor for hash-based objects, an array reference can be used to create more than one at a time. Pass an optional second argument to set a default value, it should be a constant or a callback. The callback will be executed at accessor read time if there's no set value. Accessors can be chained, that means they return their invocant when they are called with an argument.
new
my $object = SubClass->new;
my $object = SubClass->new(name => 'value');
my $object = SubClass->new({name => 'value'});
This base class provides a basic constructor for hash-based objects. You can pass it either a hash or a hash reference with attribute values.
tap
$object = $object->tap(sub {...});
$object = $object->tap($method);
$object = $object->tap($method, @args);
K combinator, tap into a method chain to perform operations on an object within the chain. The object will be the first argument passed to the callback and is also available as $_
.
# Longer version
$object = $object->tap(sub { $_->$method(@args) });
# Inject side effects into a method chain
$object->foo('A')->tap(sub { say $_->foo })->foo('B');
DEBUGGING
You can set the MOJO_BASE_DEBUG
environment variable to get some advanced diagnostics information printed to STDERR
.
MOJO_BASE_DEBUG=1
SEE ALSO
AUTHOR
alexbyk.com
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by alexbyk.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.