citromatik has asked for the wisdom of the Perl Monks concerning the following question:

Hi all

I have a class that can create an object using data coming from different sources / formats. Like:

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 { ... }

The packages My::XML and My::JSON:

package My::XML; sub _init { ... } 1; package My::JSON; sub _init { ... } 1;

The calling code would be:

use My; my $obj = My->new(source=>"xml"); # Do whatever with $obj

Is this a correct design to face this? Any caveat you may anticipate? Are there better alternatives?

Thank you very much in advance for your help