in reply to OO Inheritence
use base Vehicle; @ISA = 'Vehicle';
Pick one or the other, not both. I prefer base.
croak "$option is not valid" if ! $self->_valid( $option );Use unless.
my %valid = map { $_ => 1 } qw( Wheels Doors Color Passengers ); my %ro = map { $_ => 1 } qw( Wheels ); sub _read_only { my ($self, $option) = @_; return defined $ro{$option} ? 1 : 0; }
If you elided the lexicals in favor of class methods, you wouldn't have to repeat this code in both subclasses:
sub _attributes { return { map { $_ => 1 } qw( Wheels Doors Color Passengers ) }; } sub _valid { my ($self, $attribute) = @_; return exists $self->_attributes()->{ $attribute }; }
Finally, aside from inheriting a constructor and an AUTOLOAD, I don't see any reason why you need to inherit here. You'd probably be better off using a module that autogenerated your accessors. It's not wrong, but I don't see any real benefits to this approach.
I did it this way when I was first learning, though. It won't cause you any real trouble; it's just a bit more complication that doesn't add very much. ~shrug~
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: OO Inheritence
by exussum0 (Vicar) on May 25, 2004 at 23:15 UTC | |
by stvn (Monsignor) on May 26, 2004 at 00:15 UTC | |
by tilly (Archbishop) on May 27, 2004 at 15:07 UTC |