in reply to Conditional inheritance strategy
Is this a correct design to face this?Not in general. @ISA is a package variable, it isn't bound to a specific instance. So, if you do:
then now both $x and $y are instances of a class that inherits from My::JSON. If My::XML and My::JSON only contain _init, and this is only called from new, you're getting away with it, but if they also contain methods that will be called elsewhere from the program, behaviour may be unexpected.my $x = My->new(source=>"xml"); my $y = My->new(source=>"json");
Perhaps you can reverse the inheritance order:
package My::XML; use My; our @ISA = qw[My]; sub init {...} 1; package My::JSON; use My; our @ISA = qw[My]; sub init {...} 1; package My; sub new { my $class = shift; my $self = bless {}, $class; $self->init; $self; } 1; package main; use My::XML; use My::JSON; my $x = My::XML->new; my $y = My::JSON->new;
In Section
Seekers of Perl Wisdom