in reply to OO & multiple inheritance.

You have your inheritance the wrong way round. Cats and dogs are types of animal, so the Cat and Dog classes need to inherit from Animal - not the other way round.

package Animal; sub new { my $class = shift; my $self = {}; bless ($self, $class); return $self; } 1; ------------------------------------------------------------------- package Cat; use strict; use Animal; our @ISA = qw(Animal); sub speak { print "meow...\n"; } 1; ------------------------------------------------------------------- package Dog; use strict; use Animal; our @ISA = qw(Animal); sub speak { print "woof...\n"; } 1; --------------------------------------------------------- #!/usr/bin/perl use strict; use warnings; use Dog; use Cat; my $dog = Dog->new(); my $cat = Cat->new(); $dog->speak; $cat->speak;

I've also removed the "ref($proto) || $proto" cargo-culting from your code. If you want people to be able to call your constructor as an object method as well as a class method then you should probably have another (object method) constructor called "clone" or "copy". It's generally considered bad practice to have one constructor that is used as both.

--
<http://www.dave.org.uk>

"The first rule of Perl club is you do not talk about Perl club."
-- Chip Salzenberg

Replies are listed 'Best First'.
Re^2: OO & multiple inheritance.
by herveus (Prior) on Nov 18, 2004 at 12:40 UTC
    Howdy!

    I've also removed the "ref($proto) || $proto" cargo-culting from your code. If you want people to be able to call your constructor as an object method as well as a class method then you should probably have another (object method) constructor called "clone" or "copy". It's generally considered bad practice to have one constructor that is used as both.

    That paragraph is neeedlessly insulting, especially to someone who is manifestly new to Perl OO, if not OO in general. Further, it offers no pointers to more information on why "ref($proto) || $proto" is a bad thing, and makes an overly broad claim that it is. Without intending to divert this conversation down that path, I'll note that the question is not as settled as one would presume from the claim.

    yours,
    Michael

      ...is neeedlessly insulting...

      Actually, it didn't look insulting to me at all.
      I wonder why you aren't giving pointers to the matter, as you critcise their absence. I guess not everyone instantly understand what the both of you are talking about.
      I admit I don't do it either, but I know of this thread: ref($proto) - just say no!
      ...and I have my personal opinion on it too.

      Given the opintion expressed in that paragraph is debatable, it's still just one paragraph in a good node providing a complete answer to the OP's question.

      Cheerio, Sören

      A reply falls below the community's threshold of quality. You may see it by logging in.