NAME

Evo - Perl Evo design pattern

VERSION

version 0.010

SYNOPSIS

use Evo::Base -strict;

use Evo::Manager;
my $mngr = Evo::Manager->new;

# next tick
my $runner = $mngr->build_train;
our $state = 'non blocking';

# always nb
$runner->asap(
  sub {
    say $state;
    local $state = 'blocking?';
    $runner->asap(sub { say $state });
  }
);

# dsl
# prints 1;2;foo
my @args = (1, 2);
my $print = sub(@args) { local $, = ';'; say @args, $mngr->current('foo') };
$mngr->dsl_call({foo => 'foo'}, @args, $print);

# currying
my $debug = sub($evo, $next) {
  sub(@args) {
    say 'Got args: ', join ';', @args;
    $next->(@args);
    }
};

my $safe = sub($evo, $next) {
  sub(@args) {
    local $@;
    eval { $next->(@args) };
    warn "catched: $@" if $@;
    }
};

my $die = sub {die};
my $curry = $mngr->curry_wrappers($debug, $safe);
$curry->(sub { say "going to die"; die })->(1, 2);

my $way = $mngr->build_way;
my $train = $mngr->build_train(way => $way);
$way->curry($curry)->add(sub { say 'step1'; })->add(sub { die "step 2" })
  ->add(sub { say "step 3"; });

$train->start;

DESCRIPTION

Tiny framework for organization non-trivial code into a simple logic.
It includes benefits from functional and OO styles.

Write fast, reusable and testable code.
Familiar with OO? - Use it. Familiar with higher-order functions? - Use it.
Familiar with non-blocking style? - Use it. Want DSL? - Use it.

Do it the right way.

DESCRIPTION

Attention. Don't use it right now. Wait for the stable release

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.