On Feb 7, Jan Eden said: >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.
Hopefully I'll answer before Randal. ;) >{ package Mouse > @ISA = qw{Animal}; > ... > sub speak { > my $class = shift; > ... > Animal::speak($class); > ... > } >} I was about to ask why it's written this way, but upon checking the source, I see that this is the way the first example on overriding a method looks. >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. Right. I was about to say "why is it written this way?" but then I saw the rest of the examples (and read the rest of your email). >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"); No, it does not. If $class is 'Mouse', then $class->method(@_); will try looking for Mouse::method(), and if not, it will look through Mouse's @ISA for a class that DOES supply method(). BUT HERE, we're using $class->OtherClass::method(@_); which says explicitly to start looking for method() in OtherClass (and if it fails there, look in OtherClass's @ISA). So $class->Animal::speak(); in your case becomes Animal::speak($class); except that it becomes that DYNAMICALLY. >And when Perl does not find Animal::speak in Mouse, to: Ah, here's the confusion. This isn't looking for a method named 'Animal::speak' in 'Mouse'; it's looking for a method named 'speak' in 'Animal'. Only the right-most part of a Thing::Like::this denotes the name of a method. -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. [ I'm looking for programming work. If you like my work, let me know. ] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>