This is what "Programming Perl", the O'Reilly book, has to say about it:
"When Perl searches for a method, it makes sure that you haven't created a circular inheritance hierarchy. This could happen if two classes inherit from one another, even indirectly through other classes. Trying to be your own great-grandfather is too paradoxical even for Perl, so the attempt raises an exception."
| [reply] |
perl only loads a module once. If you use a Module that is already loaded, it's import function is called, but it is not loaded again.
| [reply] |
by 'load'-ing a module, we do essentially mean that the functions existent in the EXPORT list are placed such that the script having the 'use' statement can call them.(am I right?).
The why in case of a circular inheritance/depencency, (script abc.pl uses A.pm and B.pm, while A.pm and B.pm have a circular inheritance among them) the script(abc.pl) has acccess to a certain function inside A.pm, while B.pm does not have access to the same function ?
Am bringing in the circular dependency example, just to know how perl loads in a module, as I saw understanding this sceanrio will help me understand how perl calls 'use' in general.
Thanks to all Monks for the quick replies...
Perl learning has never been more exciting for me with a so many monks to consult with....!!!!!
| [reply] |
...(script abc.pl uses A.pm and B.pm, while A.pm and B.pm have a circular inheritance among them)...
That's "circular" as in "dog trying to catch its tail"? :-)
In my experience if your faced with this it is often best to have another look at the algorithm. Identify what it is that A.pm needs from B.pm and what B.pm needs that is in A.pm. Put all that in C.pm. A.pm and B.pm then both "use" C.pm.
The dog still hasn't caught its tail but it has had a chance to see the rabbit. :-)
| [reply] |
You know you shouldn't use B as a module name, because there's a B module that comes with perl, right? (It's best to also avoid A because it makes you want to name the next module B.) If you really want to name a throwaway module with a single letter, call it X (or any other letter except B and O).
| [reply] [d/l] [select] |