Class->method(@args)
attempts to invoke the subroutine Class::method as:
Class::method("Class", @args);
(If the subroutine can't be found, inheritance kicks in, but you'll learn about that later.) This means that you get the class name as the first parameter or the only parameter, if no arguments are given. You can rewrite the Sheep speaking subroutine as:
sub Sheep::speak { my $class = shift; print "a $class goes baaaah!\n"; }
The other two animals come out similarly:
sub Cow::speak { my $class = shift; print "a $class goes moooo!\n"; } sub Horse::speak { my $class = shift; print "a $class goes neigh!\n"; }
In each case, $class gets the value appropriate for that subroutine. But once again, you have a lot of similar structure. Can you factor out that commonality even further? Yes—by calling another method in the same class.
Copyright © 2003 O'Reilly & Associates. All rights reserved.