( 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.
In reply to Re: Module Undefined Subroutines, works one way - not another
by almut
in thread Module Undefined Subroutines, works one way - not another
by duane_ellis
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |