# ./foo.pl use strict; use warnings; use lib ('/path_to_Word_pm'); use Word; my $word = Word->new(); $word->set('apple','it'); # ./Word.pm package Word; use strict; use warnings; use base 'WordExposed::Languages'; sub new { my $class = shift; my $self = {}; bless($self, $class); return $self; } sub set { my $self = shift(); my $english = shift(); my $language = shift(); $self->{english} = $english; $self->{language} = $language; $self->_translate(); } 1; # ./WordExposed/Languages.pm package WordExposed::Languages; use WordExposed::LanguagesPrivate::French; use WordExposed::LanguagesPrivate::Italian; sub _translate { my $self = shift(); if ($self->{language} eq 'fr') { $self->_traduction(); } elsif ($self->{language} eq 'it') { $self->_traduzione(); } } 1; # ./WordExposed/LanguagesPrivate/French.pm package WordExposed::LanguagesPrivate::French; our @ISA = qw(Exporter); our @EXPORT = qw( _traducion ); our @EXPORT_OK = qw(); sub _traducion { my $self = shift(); warn 'pomme' if ($self->{english} eq 'apple'); } 1; # ./WordExposed/LanguagesPrivate/Italian.pm package WordExposed::LanguagesPrivate::Italian; our @ISA = qw(Exporter); our @EXPORT = qw( _traduzione ); our @EXPORT_OK = qw(); sub _traduzione { my $self = shift(); warn 'mela' if ($self->{english} eq 'apple'); } 1;