file - Project\Client.pm package Project::Client; use strict; sub new { my ($class, %args) = shift; $class = ref ($class) || $class; my $self = {}; ... bless ($self, $class); return $self; } ... file - Project\Client\Mode.pm package Project::Client::Mode; @ISA = ('Project::Client'); use strict; ... file - Project\Client\Mode\TestMode.pm package Project::Client::Mode::TestMode; @ISA = ('Project::Client::Mode'); use strict; ... #### file - client.pl use strict; use lib '...'; my $mode = Project::Client::Mode::TestMode -> new (...); ...