package My sub new { my ($class,%args) = @_; my $self = bless {}, $class; if ($args{source} eq 'xml') { require My::XML; @ISA = qw/My::XML/; } elsif ($args{source} eq 'json') { require My::JSON; @ISA = qw/My::JSON/; } $self->_init(); # Versions in both My::XML and My::JSON return ($self); } # rest of methods sub method1 { ... } sub method2 { ... }