Alternate Method Searching
With multiple inheritance, the default traversal of @ISA to find the right method might not work
for you, because a method in a far away superclass might hide a better
method in a closer superclass. Consider the inheritance shown in Figure 12-1, where Mule inherits from two classes, Donkey and Horse, which both inherit from Equine. The Equine has a color method, which Donkey inherits. Horse provides its own color, though. Using the default traversal,
you don’t know which color you’ll get
unless you know the order of the parent classes:
use parent qw(Horse Donkey); # finds Horse::Color first use parent qw(Donkey Horse); # finds Equine::Color first

Figure 12-1. Multiple inheritance graph
As of v5.10, the traversal is configurable. In fancy terms, this
is the method
resolution order, which you select with the mro pragma (see Chapter 29):
package Mule; use mro 'c3'; use parent qw(Donkey Horse);
The C3 algorithm traverses @ISA
so it finds inherited methods that are closer in the inheritance graph.
Said another way, that means that no superclass will be searched before
one of its subclasses. Perl will not look in Equine before it looks in Horse.
If your Perl does not support the mro pragma, you might be able to use the
MRO::Compat CPAN module.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access