Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^2: loading modules using 'use'

by angshuman (Novice)
on Jun 30, 2010 at 12:21 UTC ( [id://847313]=note: print w/replies, xml ) Need Help??


in reply to Re: loading modules using 'use'
in thread loading modules using 'use'

Thanks again... What does happen in case of circular inheritance ? Lets say a.pl uses A.pm and B.pm, while A.pm and B.pm in turn uses each other. How can in case of circular dependency/inheritance one of the module may not be loaded completely, that too from another module ? What I mean to say that while 'sub abc'(say) in A.pm is accessible fine from a.pl, it may not be accessible from B.pm. Is there a package based loading going on here ?

Replies are listed 'Best First'.
Re^3: loading modules using 'use'
by jethro (Monsignor) on Jun 30, 2010 at 12:45 UTC

    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."

Re^3: loading modules using 'use'
by Taulmarill (Deacon) on Jun 30, 2010 at 13:07 UTC

    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.

      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....!!!!!

        ...(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. :-)

Re^3: loading modules using 'use'
by ambrus (Abbot) on Jul 13, 2010 at 17:04 UTC

    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).

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://847313]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (4)
As of 2024-04-25 13:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found