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

use strict;
use warnings;
use Aspect;

aspect Profiler =>
	call qr/^SlowObject::/ &
	cflow run => 'SlowObject::run';

my $slow_object = SlowObject->new;

print "This example will complete in 4 seconds...\n";

# these calls will be profiled
$slow_object->run;

# but this will not, because it is not in the call flow of SlowObject::run
$slow_object->slow;

# -----------------------------------------------------------------------------

package SlowObject;

sub new { bless {}, shift }

sub run {
	my $self = shift;
	$self->fast;
	$self->$_ for qw(fast slow very_slow);
	print "Done with SlowObject::run\n\n";
}

sub fast {}
sub slow { sleep 1 }
sub very_slow { sleep 2 }