Dave Tang <d.t...@imb.uq.edu.au> asked: > I've been going through perldoc perlboot and I have a question about > using the SUPER class. Here's the code in the documentation: > > #!/usr/bin/perl > > use strict; > use warnings; > > { > package Animal; > sub speak { > my $class = shift; > print "a $class goes ", $class->sound, "!\n"; > } > } > > { > package Mouse; > @Mouse::ISA = qw (Animal); > sub sound { "squeak" }; > sub speak { > my $class = shift; > $class->SUPER::speak; > print "but you can barely hear it!\n"; > } > } > > Mouse->speak; #outputs a Mouse goes squeak! > # but you can barely hear it! > > It reads: "So, SUPER::speak means look in the current package's @ISA for > speak, invoking the first one found. Note that it does not look in the > @ISA of $class." > > We are calling the method speak using the Mouse class, so $class = Mouse. > So when the documentation says SUPER::speak looks in the current > package's @ISA for speak, isn't the current package Mouse (which is also > $class)? I just don't understand what the note means when it says it does > not look in the @ISA of $class. Could someone explain that for me?
I agree, the phrasing might be a bit confusing. Let's assume that you have created a derived class from Mouse, like { package Dormouse; @Dormouse::ISA = qw (Mouse); # note no speak() here } which doesn't override speak. Now, if you call Dormouse->speak() Mouse::speak is invoked, since there is no speak() method in the Dormouse package. Now $class is 'Dormouse', but the current package is 'Mouse' and the explanation from perlboot makes sense: $class->SUPER::speak() invokes Animal::speak() and not Mouse::speak(). HTH, Thomas -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/