The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Aspect::Modular - base class for reusable aspects

SYNOPSIS

  # subclassing to create a reusable aspect
  package Aspect::Library::ConstructorTracer;
  use Aspect;
  use base 'Aspect::Modular';
  sub get_advice {
     my ($self, $pointcut) = @_;
     after
        { print 'created object: '. shift->return_value. "\n" }
        $pointcut;
  }

  # using the new aspect
  package main;
  use Aspect;
  # print message when constructing new Person
  aspect ConstructorTracer => call 'Person::new';

DESCRIPTION

All reusable aspect inherit from this class. Such aspects are created in user code, using the aspect() sub exported by Aspect. You call aspect() with the class name of the reusable aspect (it must exist in the package Aspect::Library), and any parameters (pointcuts, class names, code to run, etc.) the specific aspect may require.

The Wormhole aspect, for example, expects 2 pointcut specs for the wormhole source and target, while the Profiler aspect expects a pointcut object, to select the subs to be profiled.

You create a reusable aspect by subclassing this class, and providing one template method: get_advice(). It is called with all the parameters that were sent when user code created the aspect, and is expected to return Aspect::Advice object/s, that will be installed while the reusable aspect is still in scope. If the aspect() sub is called in void context, the reusable aspect is installed until class reloading or interpreter shutdown.

Typical things a reusable aspect may want to do:

  • Install advice on pointcuts specified by the caller

  • Push (vs. OOP pull) subs and base classes into classes specified by the caller

SEE ALSO

See the Aspect pod for a guide to the Aspect module.

You can find examples of reusable aspects in the Aspect::Library package. Aspect::Library::Singleton for example.

BUGS AND LIMITATIONS

No bugs have been reported.

Please report any bugs or feature requests through the web interface at http://rt.cpan.org.

INSTALLATION

See perlmodinstall for information and options on installing Perl modules.

AVAILABILITY

The latest version of this module is available from the Comprehensive Perl Archive Network (CPAN). Visit <http://www.perl.com/CPAN/> to find a CPAN site near you. Or see <http://www.perl.com/CPAN/authors/id/M/MA/MARCEL/>.

AUTHORS

Marcel Grünauer, <marcel@cpan.org>

Ran Eilam <eilara@cpan.org>

COPYRIGHT AND LICENSE

Copyright 2001 by Marcel Grünauer

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.