I think that you are manually implementing inheritance. The following code:
use strict;
use warnings 'all';
package A;
sub _write_file {
print "Writing in package A\n";
}
sub write_file {
my $self = shift;
$self->_write_file(@_);
}
package A::B;
use base qw/A/;
sub new {
my $class = shift;
bless {} => $class;
}
sub _write_file {
print "Writing in package A::B\n";
}
my $writer = A::B->new;
$writer->write_file;
prints "Writing in package A::B" (followed by a newline, of course!), which seems to be what you want. The point is that, even though write_file is a method in package A, it's calling _write_file on an object blessed into package A::B. Am I misunderstanding what you're trying to do?