As the title says, I'm not clear on when such a subroutine will be called. From the require page at perldoc one can write:
push @INC, \&my_sub;
sub my_sub {
my ($coderef, $filename) = @_; # $coderef is \&my_sub
...
}
but where does this go exactly? The required package or the requiring script (or package)? I've tried both with some sentinel print
statements but neither worked so clearly there is something I'm not getting.
Perl calls a subroutine reference in @INC
when it is traversing @INC
to look for a module. That is, you'll trigger it when you try to load a module with use
or require
and Perl does not find that module in the preceding @INC
locations.
BEGIN {
push @INC,
sub { print "Oops: There was an error looking for $_[1]\n"; () };
}
eval "use Cat::Burglar";
eval "use Local::NotThere";
require Cat::Burglar;
You need to ensure that your subroutine reference is in @INC
before you try to load the modules. Remember that use
is a compile time feature and that require
is a run time feature. As with adding other "regular" @INC
entries, you probably want to do it in a BEGIN
block as early as possible in your program.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With