11.1 UNIVERSAL Methods
As you define classes, you 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 are derived. Any method you place
here, such as:
sub UNIVERSAL::fandango {
warn "object ", shift, " can do the fandango!\n";
}
enables all objects of your program to be called as
$some_object->fandango.
Generally, you should provide a
fandango method for specific classes of interest,
and then provide a definition in
UNIVERSAL::fandango as a backstop, in case a more
specific method can't be found. A practical example
might be a data-dumping routine for debugging or maybe a marshalling
strategy to dump all application objects to a file. Simply provide
the general method in UNIVERSAL and override it in
the specific classes for unusual objects.
Obviously, UNIVERSAL should be used sparingly
because there's only one universe of objects, and
your fandango might collide with some other
included module's fandango. For
this reason, UNIVERSAL is hardly used for anything
except methods which must be completely, well, universal. Like during
debugging.
|