in reply to Private Classes - Same or Separate Files?

I'm not sure how helpful this will be towards your end goal but you might want to check out miyagawa's Attribute::Protected which implements C++/Java style encapsulation of methods (pity it doesn't do package level encapsulation though ;-). It might go part of the way to protecting My::B to the desired level.
# NOTE: slightly modified code from the docs package SomeClass; use Attribute::Protected; sub new { return bless {}, shift } sub foo : Public { } sub _bar : Private { } sub _baz : Protected { } sub another { my $self = shift; $self->foo; # OK $self->_bar; # OK $self->_baz; # OK } 1; package DerivedClass; @DerivedClass::ISA = qw(SomeClass); sub yetanother { my $self = shift; $self->foo; # OK $self->_bar; # NG: private method $self->_baz; # OK } 1; package main; my $some = SomeClass->new; $some->foo; # OK $some->_bar; # NG: private method $some->_baz; # NG: protected method
HTH

broquaint