perl – 在@INC中什么时候引用子程序?

前端之家收集整理的这篇文章主要介绍了perl – 在@INC中什么时候引用子程序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正如标题所说,我不清楚这样一个子程序将被调用.从 perldoc perldoc可以写:
  1. push @INC,\&my_sub;
  2. sub my_sub {
  3. my ($coderef,$filename) = @_; # $coderef is \&my_sub
  4. ...
  5. }

但是这究竟在哪里呢?所需的包或需要的脚本(或包)?我已经尝试了一些哨兵打印声明,但没有这么清楚,有一些我没有得到.

解决方法

Perl在@INC中调用子程序引用,当它遍历@INC以查找模块时.也就是说,当您尝试使用或需要加载模块时,您将触发它,并且Perl在以前的@INC位置找不到该模块.
  1. BEGIN {
  2. push @INC,sub { print "Oops: There was an error looking for $_[1]\n"; };
  3. }
  4.  
  5. eval "use Cat::Burglar";
  6. eval "use Local::NotThere";
  7. require Cat::Burglar;

在尝试加载模块之前,您需要确保您的子程序引用位于@INC中.请记住,use是一个编译时功能,而且这是一个运行时功能.与添加其他“常规”@INC条目一样,您可能希望在程序中尽早在BEGIN块中执行此操作.

猜你在找的Perl相关文章