Chapter 14. Some Advanced Object Topics
You might wonder, “Do all objects inherit from a common class?” “What if a method is missing?” “What about multiple inheritance?” or “How can I tell what sort of object I have?” Well, wonder no more. This chapter covers these subjects and more.
UNIVERSAL Methods
As we define classes, we create inheritance hierarchies
through the global @ISA
variables in
each package. To search for a method, Perl wanders through the @ISA
tree until it finds a match or
fails.
After the search fails, however, Perl always looks in one special
class called UNIVERSAL
and invokes a
method from there, if found, just as if it had been located in any other
class or superclass.
One way to look at this is that UNIVERSAL
is the base class from which all
objects derive. Any method we place here, such as:
sub UNIVERSAL::fandango { warn 'object ', shift, " can do the fandango!\n"; }
enables all objects of our program to be called as $some_object->fandango
.
Generally, we should provide a fandango
method for specific classes of
interest and then provide a definition in UNIVERSAL::fandango
as a backstop, in case
Perl can’t find a more specific method. A practical example might be a
data-dumping routine for debugging or maybe a marshaling strategy to
dump all application objects to a file. We simply provide the general
method in UNIVERSAL
and override it
in the specific classes for unusual objects.
Obviously, we should use UNIVERSAL
sparingly, because there’s only one universe of objects, ...
Get Intermediate Perl now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.