Как в заголовке говорится, я не ясен на том, когда такую подпрограмму назовут. От потребовать страницы в perldoc можно записать:
push @INC, \&my_sub;
sub my_sub {
my ($coderef, $filename) = @_; # $coderef is \&my_sub
...
}
но где это идет точно? Необходимый пакет или сценарий требования (или пакет)? Я попробовал обоих некоторой сигнальной меткой print
операторы, но ни один не работал так ясно существует что-то, что я не получаю.
Perl вызывает ссылку на подпрограмму в @INC
, когда он просматривает @INC
для поиска модуля. То есть вы активируете его, когда попытаетесь загрузить модуль с , используйте
или require
, и Perl не найдет этот модуль в предыдущих местах @INC
.
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;
Перед загрузкой модулей необходимо убедиться, что ссылка на подпрограмму находится в @INC
. Помните, что use
- это функция времени компиляции, а require
- функция времени выполнения. Как и в случае добавления других «обычных» записей @INC
, вы, вероятно, захотите сделать это в блоке BEGIN
как можно раньше в вашей программе.
Чтобы не путать нашу подпрограмму с подпрограммами в стандартных модулях Perl, обычно лучше использовать unshift
вместо нажмите
. Поэтому сначала он будет использовать вашу подпрограмму из @INC
.