Python::Decorator filtered the source into: ------------------------------- use Carp qw(confess); sub loginout { my $name = shift; return sub { my $f = shift; return sub { print "entering sub $name\n"; &$f(@_); print "leaving sub $name\n"; }; }; } sub debug { my ($a,$b) = @_; return sub { my $f = shift; return sub { print "debug says $a $b before call\n"; &$f(); print "debug says $a $b after call\n"; } }; } sub memoize { my $f = shift; return sub { print "well, this is where we could return memoized results\n"; &$f(); print "and this is where we could memoize results\n"; }; } # and that is not a decorator #@blah { no strict "refs"; *{__PACKAGE__."::foo"} = memoize(debug("just another","perl hacker")->(loginout('foo')->( sub { print "running foo()\n"; } ))); } foo(); ------------------------------- well, this is where we could return memoized results debug says just another perl hacker before call entering sub foo running foo() leaving sub foo debug says just another perl hacker after call and this is where we could memoize results