package Obj; sub new { my $class = shift; my $id = shift; return bless { id => $id }, $class; } sub method1 { my $self = shift; print "Object $self->{'id'}: Method 1\n"; } sub method2 { my $self = shift; print "Object $self->{'id'}: Method 2\n"; } package main; use Hook::LexWrap; wrap 'Obj::method1', pre => sub { print "PRE method1\n" }, post => sub { print "POST method1\n\n" }; wrap 'Obj::method2', pre => sub { print "PRE method2\n" }, post => sub { print "POST method2\n\n" }; my $object1 = new Obj(1); my $object2 = new Obj(2); $object1->method1; $object1->method2; $object2->method1; $object2->method2; ## OUTPUT PRE method1 Object 1: Method 1 POST method1 PRE method2 Object 1: Method 2 POST method2 PRE method1 Object 2: Method 1 POST method1 PRE method2 Object 2: Method 2 POST method2