in reply to Re^5: "use" modules inside modules
in thread "use" modules inside modules

I requested that you show us sufficient code to demonstrate the problem, but no more than that.

Your failed on both counts. You did not post sufficient code to demonstrate the problem, and you posted extraneous code that prevents us from running your code and distracts from the issue at hand.

Replies are listed 'Best First'.
Re^7: "use" modules inside modules
by bogaertb (Novice) on Jul 03, 2009 at 06:15 UTC
    I'm sorry but this is just impossible: the complete package is over 50000 lines of code and extracting enough code to make you run this is not easy at all (let alone that I would have time to do that which I do not have at all at this moment). On top of that the program is interacting with an external device using Telnet (or SSH) and SNMP which makes it all even more complex.

    I'm only trying to understand how perl "imports" data and handles multiple "imports". As far as I understand the data is in a namespace related to the module (so Capability.pm). If loaded once the name space contains all related to %ntCapabilities. If perl would encounter use Capability once more there should be no need to load again the namespace of the module since it is already there. So this is what I do not understand. If I ommit use Capability from Octopus.pm there is no issue, if I include use Capability in Octopus.pm there is an issue. Also remember that Capability.pm has been loaded from the main program swdl.pl. There is no other data assignment to %ntCapabilities then the definition of the hash itself. All other accesses are simply using (defined($ntCapabilities{...}) to verify whether something is supported by the toolset or access using the various keys used in the hash. This hash is intended to be a act as a constant.

      I'm sorry but this is just impossible: the complete package is over 50000 lines of code and extracting enough code to make you run this is not easy at all

      It's impossible to extract the 10 lines that matter? If it's impossible for you to tell me what the problem is, then there's no hope of me fixing it.

      As far as I understand the data is in a namespace related to the module (so Capability.pm)

      No. They're (also) called packages, and %ntCapabilities isn't a package variable.

      If perl would encounter use Capability once more there should be no need to load again the namespace of the module since it is already there.

      When perl encounters require Capability; a second time, Perl doesn't execute the module again. use Module is a shortcut for a call to require and possibly a call to import, and they happen as soon as the statement is compiled.