Когда подпрограмма является ссылкой в названной @INC?

Как в заголовке говорится, я не ясен на том, когда такую подпрограмму назовут. От потребовать страницы в perldoc можно записать:

push @INC, \&my_sub;
sub my_sub {
   my ($coderef, $filename) = @_; # $coderef is \&my_sub
   ...
}

но где это идет точно? Необходимый пакет или сценарий требования (или пакет)? Я попробовал обоих некоторой сигнальной меткой print операторы, но ни один не работал так ясно существует что-то, что я не получаю.

9
задан gvkv 29 March 2010 в 20:40
поделиться

2 ответа

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 как можно раньше в вашей программе.

12
ответ дан 4 December 2019 в 15:13
поделиться

Чтобы не путать нашу подпрограмму с подпрограммами в стандартных модулях Perl, обычно лучше использовать unshift вместо нажмите . Поэтому сначала он будет использовать вашу подпрограмму из @INC .

1
ответ дан 4 December 2019 в 15:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: