如标题所示,我不清楚何时会调用此类子例程。在require的perldoc页面上,可以写:
push @INC, \&my_sub;
sub my_sub {
my ($coderef, $filename) = @_; # $coderef is \&my_sub
...
}
但这到底去了哪里?所需的软件包或所需的脚本(或软件包)?我已经尝试了一些哨兵
print
语句,但都没有很清楚地发现我没有得到什么。 最佳答案
当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;
在尝试加载模块之前,需要确保子例程引用在
@INC
中。请记住use
是编译时功能,而require
是运行时功能。与添加其他“常规” @INC
条目一样,您可能希望在程序中尽早在BEGIN
块中进行操作。关于perl - @INC中的子例程引用何时被调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2541119/