package Foo; sub do_it { my $self = shift; my $do_it_to = shift; $do_it_to->handler(sub { $self->logger(@_) }); } # and other stuff, like sub logger. package Bar; sub handler { my $self = shift; my $callback = shift; for ($self->get_all_items()) { $callback->($_); } }