thanks. I just realized that my error comes from another source. How do I force the "import" to be the first executed statement? ...
answer below
package cacher;
use strict;
use warnings;
use warnings FATAL => qw{ uninitialized }; # larry, this should have b
+een part of warnings.
use base 'Exporter';
our @EXPORT = ("pdfpagenum");
BEGIN {
my $saved_pkg_args="undefined";
sub import {
print "import args: ".join("|", @_)."\n";
$saved_pkg_args= $_[1];
print "in import, saved args '$saved_pkg_args'\n";
}
sub test { print STDERR "in test, you have saved '$saved_pkg_args'\n
+"; }
print "this should executed after the import: $saved_pkg_args.\n"
}
1;
I guess I should just call everything I want to be main code from the import statement itself. still strange that import() is not the first thing called.
| [reply] [Watch: Dir/Any] [d/l] |
How do I force the "import" to be the first executed statement?
You can't (at least not with the desired arguments), because cacher->import(...) is being called after the module has been required — at which point any code of the module outside of subroutines will already have been run. That's how use works...
Update: it's maybe worth mentioning that import is not being called at all if you say use cacher ();. If that's an issue in your case, you might want to setup %cachehash with a default directory at the time the module is being required. Then, in case import is being called, just re-initialize %cachehash with the directory specified as the argument to use. Kind of like this:
sub import {
...
setup_cachehash($dir) if $dir;
}
sub setup_cachehash {
...
}
setup_cachehash("/tmp"); # default
(From a performance point of view, doing things twice is of course suboptimal...)
P.S.: if you use Exporter in the same package, you probably want to explicitly call its import routine with the appropriate arguments (first arg = your package name), because normally the import method will be inherited from Exporter. In other words, Exporter's import will no longer be called (automatically) when you implement import yourself... | [reply] [Watch: Dir/Any] [d/l] [select] |