explore using Class::InsideOut