package A; sub new { my $class = shift; return bless {}, $class; } sub _exe { my ($self,$a) = shift; $self->$a->(); # probably wrong !! } package B; use base 'A'; sub new { my $class = shift; return bless {}, $class; } sub _what { my ($self,$y) = shift; ## HERE I would like to pass _print() with $y (let it be a string) ## to package A, method _exe() so that it executes ## _print($y) in B.... Is this possible?? } sub _print { my ($self,$x) = shift; print "$x\n"; }