Hi all,

I just work my way through "Learning Perl Objects, References & Modules". Now at one 
point, I am stuck: Randal introduces classes and methods in Chapter 8.

He gives the following example for overriding methods:

{   package Mouse
    @ISA = qw{Animal};
    ...
    sub speak {
    my $class = shift;
     ...
     Animal::speak($class);
     ...
     }
}
 
 Since there is a method speak in Mouse, it would override the parent's classes method 
Animal::speak if the latter were not called explicitly.

But, as Randal points out, this forces Perl to look for speak in Animal and nowhere 
else - without the method invocation arrow, it cannot check @ISA for ancestor classes.

So far, I get the point. But then he introduces the following solution:

$class->Animal::speak(@_);

Apart from the fact that @_ should be unnecessary here (or did I get something wrong), 
this should expand to:

Mouse::Animal::speak("Mouse");

And when Perl does not find Animal::speak in Mouse, to:

Animal::Animal::speak("Mouse";

and to higher classes if speak is not found there. Now my question:

Does Perl reduce Animal::Animal::speak("Mouse") automatically to 
Animal::speak("Mouse"). And, if speak is not in Animal, how does it handle an 
expression like:

LivingCreature::Animal::speak("Mouse");

It seems to me that the hard-coded package name we got rid of by using method calls 
just got back into our syntax. At the same time, I am sure the code works (have not 
tried it yet) and Perl does as it should.

But how does this work?

Thanks for any explanations,

Jan
-- 
There's no place like ~/

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to