Changes for version 0.26

  • With the primary internals refactoring completely, we now start a series of commits to remove excessive abstractions, and to alter others to more appropriate abstractions (still without changing any of the APIs)
  • Cleaning up and refactoring the Aspect/Advice constructor code in Aspect.pm
  • Removed the weird Aspect::Advice->new( type, code, pointcut ) for a more conventional ->new setup.
  • Attempt to load Sub::Uplevel earlier (before we load Exporter) so there is an increased likelyhood that we don't have to reload Exporter later.
  • Removed redundant references to Hook::LexWrap from the POD, and removed the "Convert to Sub::Uplevel" item from the TO DO list.
  • Rewrote the Pointcut family of classes to have a simpler structure which should be faster. Some now use blessed ARRAYs as a preparatory step for allowing the AndOp/OrOp pointcuts to have more than just two elements (and to allow enable certain optimisation strategies down the line).
  • Removed the faulty Aspect::Pointcut::BinOp abstraction entirely. It was causing boolean and/or operations to always run both sides, so unlike the overloaded expression they were created from, they would never shortcut. This is now resolved, and the an/or pointcut elements now shortcut properly.

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
give Test::Class test methods an IUT (implementation under test)
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/Before.pm
in lib/Aspect/Library/Listenable.pm