.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
.\" ========================================================================
.de Sh \" Subsection heading
.de Sp \" Vertical space (when we can't use .PP)
.de Vb \" Begin verbatim text
.de Ve \" End verbatim text
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
. tm Index:\\$1\t\\n%\t"\\$2"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. \" simple accents for nroff and troff
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
.\" ========================================================================
.TH Class::ISA 3 "2002-06-01" "perl v5.8.0" "Perl Programmers Reference Guide"
Class::ISA \-\- report the search path for a class's ISA tree
\& # Suppose you go: use Food::Fishstick, and that uses and
\& # inherits from other things, which in turn use and inherit
\& # from other things. And suppose, for sake of brevity of
\& # example, that their ISA tree is the same as:
\& @Food::Fishstick::ISA = qw(Food::Fish Life::Fungus Chemicals);
\& @Food::Fish::ISA = qw(Food);
\& @Food::ISA = qw(Matter);
\& @Life::Fungus::ISA = qw(Life);
\& @Chemicals::ISA = qw(Matter);
\& @Life::ISA = qw(Matter);
\& print "Food::Fishstick path is:\en ",
\& join(", ", Class::ISA::super_path('Food::Fishstick')),
\& Food::Fishstick path is:
\& Food::Fish, Food, Matter, Life::Fungus, Life, Chemicals
Suppose you have a class (like Food::Fish::Fishstick) that is derived,
via its \f(CW@ISA\fR, from one or more superclasses (as Food::Fish::Fishstick
is from Food::Fish, Life::Fungus, and Chemicals), and some of those
superclasses may themselves each be derived, via its \f(CW@ISA\fR, from one or
more superclasses (as above).
When, then, you call a method in that class ($fishstick\->calories),
Perl first searches there for that method, but if it's not there, it
goes searching in its superclasses, and so on, in a depth-first (or
maybe \*(L"height\-first\*(R" is the word) search. In the above example, it'd
first look in Food::Fish, then Food, then Matter, then Life::Fungus,
then Life, then Chemicals.
This library, Class::ISA, provides functions that return that list \*(--
the list (in order) of names of classes Perl would search to find a
method, with no duplicates.
.IP "the function Class::ISA::super_path($CLASS)" 4
.IX Item "the function Class::ISA::super_path($CLASS)"
This returns the ordered list of names of classes that Perl would
search thru in order to find a method, with no duplicates in the list.
\&\f(CW$CLASS\fR is not included in the list. \s-1UNIVERSAL\s0 is not included \*(-- if
you need to consider it, add it to the end.
.IP "the function Class::ISA::self_and_super_path($CLASS)" 4
.IX Item "the function Class::ISA::self_and_super_path($CLASS)"
Just like \f(CW\*(C`super_path\*(C'\fR, except that \f(CW$CLASS\fR is included as the first
.IP "the function Class::ISA::self_and_super_versions($CLASS)" 4
.IX Item "the function Class::ISA::self_and_super_versions($CLASS)"
This returns a hash whose keys are \f(CW$CLASS\fR and its
(super\-)superclasses, and whose values are the contents of each
class's \f(CW$VERSION\fR (or undef, for classes with no \f(CW$VERSION\fR).
The code for self_and_super_versions is meant to serve as an example
for precisely the kind of tasks I anticipate that self_and_super_path
and super_path will be used for. You are strongly advised to read the
source for self_and_super_versions, and the comments there.
.IX Header "CAUTIONARY NOTES"
* Class::ISA doesn't export anything. You have to address the
functions with a \*(L"Class::ISA::\*(R" on the front.
* Contrary to its name, Class::ISA isn't a class; it's just a package.
* Say you have a loop in the \s-1ISA\s0 tree of the class you're calling one
of the Class::ISA functions on: say that Food inherits from Matter,
but Matter inherits from Food (for sake of argument). If Perl, while
searching for a method, actually discovers this cyclicity, it will
throw a fatal error. The functions in Class::ISA effectively ignore
this cyclicity; the Class::ISA algorithm is \*(L"never go down the same
path twice\*(R", and cyclicities are just a special case of that.
* The Class::ISA functions just look at \f(CW@ISAs\fR. But theoretically, I
suppose, AUTOLOADs could bypass Perl's ISA-based search mechanism and
do whatever they please. That would be bad behavior, tho; and I try
* If Perl can't find a method anywhere in the \s-1ISA\s0 tree, it then looks
in the magical class \s-1UNIVERSAL\s0. This is rarely relevant to the tasks
that I expect Class::ISA functions to be put to, but if it matters to
you, then instead of this:
\& @supers = Class::Tree::super_path($class);
\& @supers = (Class::Tree::super_path($class), 'UNIVERSAL');
And don't say no-one ever told ya!
* When you call them, the Class::ISA functions look at \f(CW@ISAs\fR anew \*(--
that is, there is no memoization, and so if ISAs change during
runtime, you get the current \s-1ISA\s0 tree's path, not anything memoized.
However, changing ISAs at runtime is probably a sign that you're out
Copyright (c) 1999, 2000 Sean M. Burke. All rights reserved.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
Sean M. Burke \f(CW\*(C`sburke@cpan.org\*(C'\fR