The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Evo - Evo - the next generation component-oriented development framework

VERSION

version 0.0195

DESCRIPTION

This framework opens new age of perl programming It provides rewritten and postmodern features like

  • Rewritten sexy Evo::Export

  • Post modern component oriented programming Evo::Comp instead of OO

  • (no docs yet) Fast Event-Loop Evo::Loop with unique feature zones (Not ready)

  • Fast non recursive Evo::Promise, 100% "Promise/Spec A" compatible. + Nice syntax via experimental Evo::Prm

  • Interesting Evo::Realm design pattern, which is as handy as "Singleton" but without Singleton's flaws. Testable and mockable alternative of the global class

  • Exception handling in pure perl: Evo::Eval, "try catch" alternative. Like Try::Tiny, but without its bugs and much faster

  • Evo::Ee - a component role that gives your component "EventEmitter" abilities

SYNOPSYS

  # enables strict, warnings, utf8, :5.22, signatures, postderef
  use Evo;

VIM

Perl Evo gif

Vim ultisnips with Evo support can be found here: https://github.com/alexbyk/vim-ultisnips-perl

IMPORTING

Load Module and call itss import method, emulating caller.

  use Evo 'Evo::SomeComp';
  use Evo 'Evo::SomeComp(function)';
  use Evo 'Evo::SomeComp(function,otherfunc)';
  use Evo 'Evo::SomeComp function1 function2';

Used to make package header shorter

  use Evo '-Eval *; My::App';

SHORTCUTS

  : => . (append to current)
  :: => .. (append to parent)
  - => Evo (append to Evo)

shortcuts

Shortcuts are used to make life easier during code refactoring (and your module shorter) in Evo::Export and "with" in Evo::Comp

- is replaced by Evo

  use Evo '-Promise promise'; # "Evo::Promise promise"

: and :: depend on the package name where they're used

: means relative to the current module as a child

  package My::App;
  use Evo ':Bar'; # My::App::Bar

:: means it's a sibling module (child of the parent of the current module)

  package My::App;
  use Evo '::Bar'; # My::Bar

IMPORTS

With or without options, use Evo loads Evo::Default:

-Default

  use strict;
  use warnings;
  use feature ':5.22';
  use experimental 'signatures';
  use feature 'postderef';

I have decided that using 5.22 and some of the experimental features it brings has many benefits and is worth it. This list will be expanded in the future, I hope

-Loaded

This marks inline or generated classes as loaded, so can be used with require or use. So this code won't die

  require My::Inline;

  {
    package My::Inline;
    use Evo -Loaded;
    sub foo {'foo'}
  }

AUTHOR

alexbyk.com

COPYRIGHT AND LICENSE

This software is copyright (c) 2016 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.