in reply to Re^4: Importing constants into another module
in thread Importing constants into another module

Why is it causing a problem? According to perlmod, "use Module" is exactly like BEGIN { require Module; import Module; } - thus "use Audit::Config" is like BEGIN { require Audit::Config; import Audit::Config; }. Perl will go looking in the Audit::Config namespace for a function called "import". It will fail because the package loaded by the require Audit::Config part of that code really was Config rather than Audit::Config.

Once you change the package to match the filename, with its full path, in proper perl convention, perl can now find the import sub in Audit::Config. "Wait a minute!" you may say. "I don't have an import sub in Audit::Config. I scanned my entire file - even the parts I didn't post!" Ah, but you do! It is placed there by the fact that you're deriving from Exporter! How convenient is that! Unfortunately in this case, there are some perl conventions that are actually hard-and-fast rules which brought you some headaches. In many cases, the fact that the package name doesn't line up with the bareword passed to "use" is a minor detail - just a convention without a requirement. However, many modules, including Exporter, assume that you follow convention and ... well, you get to post your code to PerlMonks :-)

Replies are listed 'Best First'.
Re^6: Importing constants into another module
by paulski (Beadle) on Feb 03, 2005 at 05:15 UTC
    Makes sense...Thanks for that. :-)