9.5 Inheriting the Constructor


Was there anything specific to Horse in that method? No. Therefore, it's also the same recipe for building anything else inherited from Animal , so let's put it there:

 { package Animal;   sub speak {     my $class = shift;     print "a $class goes ", $class->sound, "!\n"   }   sub name {     my $self = shift;     $$self;   }   sub named {     my $class = shift;     my $name = shift;     bless $name, $class;   } } { package Horse;   @ISA = qw(Animal);   sub sound { "neigh" } } 

Ahh, but what happens if you invoke speak on an instance?

 my $tv_horse = Horse->named("Mr. Ed"); $tv_horse->speak; 

You get a debugging value:

 a Horse=SCALAR(0xaca42ac) goes neigh! 

Why? Because the Animal::speak routine expects a classname as its first parameter, not an instance. When the instance is passed in, you'll use a blessed scalar reference as a string, which shows up as you saw it just now ”similar to a stringified reference, but with the class name in front.



Learning Perl Objects, References & Modules
Learning Perl Objects, References, and Modules
ISBN: 0596004788
EAN: 2147483647
Year: 2003
Pages: 199

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net