#!/usr/bin/perl -w use strict; my $a = new A(); $a->pass_sub(); package A; use B; sub new { my ( $class, ) = @_; my $self = { }; bless $self, ref($class) || $class; return $self; } sub pass_sub { my ( $self, ) = @_; $self->{'sub_handler'} = new B(); $self->{'sub_handler'}->use_sub_later( sub { $self->say_hello } ); } sub say_hello { my ( $self, ) = @_; print "Hello! Args: ". join(',', @_) ."\n"; } 1; package B; sub new { my ( $class, ) = @_; my $self = { }; bless $self, ref($class) || $class; return $self; } sub use_sub_later { my ( $self, $sub, ) = @_; my $ready_to_use = 1; $sub->('ARG1', 'ARG2') if $ready_to_use; } 1;