如标题所示,我不清楚何时会调用此类子例程。在requireperldoc页面上,可以写:

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

但这到底去了哪里?所需的软件包或所需的脚本(或软件包)?我已经尝试了一些哨兵print语句,但都没有很清楚地发现我没有得到什么。

最佳答案

当Perl遍历@INC查找模块时,它会在@INC中调用子例程引用。也就是说,当您尝试使用userequire加载模块并且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/

10-12 22:42