in reply to Module Undefined Subroutines, works one way - not another
( Not sure whether I have correctly digested every bit of information you supplied (quite a lot to read :) -- so in case I misinterpreted something, just ignore my post...)
You are aware that symbols are exported only into the namespace of the module from which the use is being issued, are you?
A simple example. Assume the following definitions
package X; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(func_in_X); use Y; sub func_in_X { print "func_in_X called.\n"; } 1; --- package Y; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(func_in_Y); sub func_in_Y { print "func_in_Y called.\n"; } 1;
Now, if you only use X in your script:
#!/usr/bin/perl use X; # X uses Y secondarily # this works func_in_X(); # imported into our namespace Y::func_in_Y(); # fully qualified X::func_in_Y(); # fully qualified via namespace X, # into which func_in_Y() has been exported # this doesn't work func_in_Y(); # not imported into our namespace
A simple way around this is to explicitly use every module, of which you need any symbols in your current namespace.
|
|---|