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 { ... }
####
package My::XML;
sub _init { ... }
1;
package My::JSON;
sub _init { ... }
1;
##
##
use My;
my $obj = My->new(source=>"xml");
# Do whatever with $obj