http://www.perlmonks.org?node_id=988435

navneet03 has asked for the wisdom of the Perl Monks concerning the following question:

I have a perl module : abcUtil.pm which has a subroutine check :
package abc::abcUtil; require "common.pl"; sub check { .. PERL_DEBUG(""); # PERL_DEBUG is in common.pl .. }
When I execute this , it works fine, But when i use this pm in another perl:
require "common.pl"; use abc::abcUtil; sub func { abc::abcUtil::check(); }
Here, if I call func(), I get this error : "Undefined subroutine &abc::abcUtil::PERL_DEBUG .." There are other direct occurrences of PERL_DEBUG in this perl file which are working fine. What might be wrong ? Thanks -------------- I updated the code in the 2nd file as follows:
#require "common.pl"; use abc::abcUtil; sub func { abc::abcUtil::check(); }
Basically removed the use of common.pl. Kept the abcUtil file as unchanged. Now it worked. But I can't keep it this way as have to use this common file. Is it some conflict due to the use of 'require "common.pl" ' in both the files?

Replies are listed 'Best First'.
Re: Undefined subroutine &abc::abcUtil::PERL_DEBUG
by moritz (Cardinal) on Aug 20, 2012 at 11:58 UTC

    You need to use Exporter and set it up so that &check is exported, and thus can e used in the script or modules that uses it.

    Update: MidLifeXis++ pointed out that it's a fully qualified call that goes wrong, so Exporter is likely not the solution.

    From the code you have shown I can't figure out what's wrong. But since the code you did show has so many errors (missing semicolon all over), I'd guess that the most likely cause is a mis-spelled package name. If that's not the case, please reduce your problem to a few lines in each file, and post the complete (reduced) code that shows your code.

      I updated the code in the 2nd file as follows:
      #require "common.pl"; use abc::abcUtil; sub func { abc::abcUtil::check(); }
      Basically removed the use of common.pl. Kept the abcUtil file as unchanged. Now it worked. But I can't keep it this way as have to use this common file. Is it some conflict due to the use of 'require "common.pl" ' in both the files?

        So what does common.pl do?

Re: Undefined subroutine &abc::abcUtil::PERL_DEBUG
by Anonymous Monk on Aug 20, 2012 at 12:24 UTC