Context
MyModule.pm
#!/usr/bin/perl -w
use strict;
package MyModule;
use Exporter;
our @ISA = qw( Exporter );
our @EXPORT = qw( MyFunc );
# ... some other subs go here ... [1]
sub MyFunc {
return 'Oh yeah!';
}
# ... some other subs go here ... [2]
1;
}
SomeOOModule.pm
#!/usr/bin/perl -w
use strict;
use MyModule; # try 1
{ package SomeOOModule;
use MyModule; # try 2
# ... some other subs go here ... [3]
sub GetFuncy {
warn '------ ' . __PACKAGE__ . " ------\n";
#warns "------ SomeOOModule ------"
use MyModule; # try 3
return MyFunc;
}
# ... some other subs go here ... [4]
}
MyProgram.pl
#!/usr/bin/perl -w
use strict;
print SomeOOModule::GetFuncy();
Question
When might this `use MyModule;` not import MyFunc into SomeOOModule::?
Answers
- When MyModule.pm isn't found in @INC. Fix: Add it.
- When the namespace has been switched with another package declaration somewhere in 3. Fix:
- When the modules are recursive. Fix: Fix the recursion, or put the Export code into a BEGIN block.
- YOUR ANSWER TO BE ADDED HERE
Extra Credit
Point out where a deviation from the code given might create a different reason for this problem to occur.
|