Changes for version 0.28
- Implemented Pointcut currying. The pointcut objects will optimise themselves down to just the section that should run if we assume the function was hooked correctly. This not only makes the hooks much more efficient in working out if they need to fire, but it also fixes a major bug with negative call pointcuts always causing all functions to not fire.
- Resolved RT #36527 - Minor doc bug s/Profiled/Profiler/
- Moved Aspect::Library::Listenable into it's own distribution
- Migrated all the tests from Test::Class to normal Test::More
- Various code clean up and simplification, with less exporting
- Added missing Task::Weaken dependency
- Fixed, hopefully, the "variables will not remain shared" but by moving from using pure named hook functions to assigning anonymous subroutines to the typeglob instead.
- Pointcuts now boolify (quickly) to true, and don't stringify to a Data::Dumper debugging spew any more.
- Implemted the internals needed to support AndOp and OrOp pointcuts with more than 2 elements, so that in future long chained collections of & or | pointcuts will collapse down into a single object, instead of building as giant nested trees of boolean pairs.
Modules
Aspect-oriented programming (AOP) for Perl
change how Perl code is run at a pointcut
a pointcut context for advice code
Observer pattern with events
cross-cutting memoization
A singleton aspect
A wormhole between call frames
base class for reusable aspects
pointcut base class
Logical 'and' operation pointcut
Call pointcut
Cflow pointcut
Logical 'not' operation pointcut
Logical 'or' operation pointcut
Provides
in lib/Aspect/Advice/After.pm
in lib/Aspect/Advice/Around.pm
in lib/Aspect/Advice/Before.pm
in lib/Aspect/Library/Listenable/Event.pm