正如标题所说,我不清楚何时会调用这样的子程序.从perldoc的require页面可以写出:
push @INC, \&my_sub;
sub my_sub {
my ($coderef, $filename) = @_; # $coderef is \&my_sub
...
}
Run Code Online (Sandbox Code Playgroud)
但这究竟在哪里?必需的包或要求的脚本(或包)?我已经尝试了一些哨兵print陈述,但两种方法都没有这么清楚,有些东西我没有得到.
bri*_*foy 12
Perl在@INC遍历@INC查找模块时调用子例程引用.也就是说,当您尝试使用use或加载模块时,您将触发它,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;
Run Code Online (Sandbox Code Playgroud)
在@INC尝试加载模块之前,需要确保子例程引用已经存在.请记住,这use是一个编译时功能,这require是一个运行时功能.与添加其他"常规" @INC条目一样,您可能希望BEGIN在程序中尽早在块中执行此操作.