Perl Cd Bookshelf [Electronic resources]

نسخه متنی -صفحه : 875/ 90
نمايش فراداده

8.42. Class::ISA

Allows you to scan @ISA—in order and without duplicates—for names of classes that Perl would scan to find a method. This is important when using classes that are derived from other classes, which are themselves derived from other classes, and so forth. Class::ISA is bundled with the Perl 5.8 source kit.

Let''s say that you called SomeClass->method(). Perl searches for method() first in SomeClass, but will search its superclasses for method() if it doesn''t find it in SomeClass. For example:

@SomeClass::ISA = qw(SomeOther SomeOtherOther SomeOtherOtherOther);
use Class::ISA;
print "SomeClass::ISA path is:\n ",
join(", ", Class::ISA::super_path(`SomeClass'')), "\n";

This prints:

SomeOther, SomeOtherOther, SomeOtherOtherOther

Class::ISA doesn''t export anything. If classes erroneously inherit from each other; i.e., if there''s a loop (or cycle) between what''s inherited between classes, Perl throws an error, and Class::ISA itself will ignore the loop. If Perl can''t find the method in the @ISA tree, it looks in UNIVERSAL, but Class::ISA does not. You may do something like the following to search in UNIVERSAL as well:

@supers = (Class::Tree::super_path($CLASS), `UNIVERSAL'');

Here are the Class::ISA methods.

Class::ISA::self_and_super_path($CLASS)

Identical to super_path, except that $CLASS is included as the first element.

Class::ISA::self_and_super_versions($CLASS)

Returns a hash with keys that are $CLASS (and its superclasses) and values that are the contents of the $VERSION of each class. If $VERSION does not exist, sel_and_super_versions returns undef.

Class::ISA::super_path(class)

Returns an ordered list of names of classes that Perl would search through to find a method. Note that no duplicates will be allowed in the list; nor will class be included in the list. UNIVERSAL is not included in the list, but if you need it, you should add it to the end of the list.