Man pages sections > man3 > Aspect::Modular

Aspect::Modular - First generation base class for reusable aspects

Aspect::Modular(3pm) User Contributed Perl Documentation Aspect::Modular(3pm)


Aspect::Modular - First generation base class for reusable aspects


  # Subclassing to create a reusable aspect
  package Aspect::Library::ConstructorTracer;
  use strict;
  use base 'Aspect::Modular';
  use Aspect::Advice::After ();
  sub get_advice {
     my $self     = shift;
     my $pointcut = shift;
     return Aspect::Advice::After->new(
         lexical  => $self->lexical,
         pointcut => $pointcut,
         code     => sub {
  # Using the new aspect
  package main;
  use Aspect;
  # Print message when constructing new Person
  aspect ConstructorTracer => call 'Person::new';


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.
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


Adam Kennedy <>
Marcel Gruenauer <>
Ran Eilam <> Copyright 2001 by Marcel Gruenauer
Some parts copyright 2009 - 2013 Adam Kennedy.
2013-04-09 perl v5.14.2