催化剂需要在整个应用中使用LIB



所以我有一个 .lib 文件,其中包含一些我自己的子例程,我想将其提供给整个 Catalyst 应用程序。现在我需要lib/myapp.pm中的文件,我没有问题。但是,每当我尝试在控制器中调用该子例程时,都会收到此错误:

"Undefined subroutine &myapp::Controller::Root::my_sub called at 
/home/user/myapp/lib/myapp/Controller/Root.pm line 35, <DATA> line 1003."

如果我在控制器中需要我想要的文件,那不会给我任何问题。但是,如果可能的话,我宁愿只在一个地方为整个应用程序加载它。另外,如果我需要在控制器中加载该文件,这是否意味着每次发出请求时都会加载此文件?(如果这有任何区别,我正在使用mod_perl)。我想使整个应用程序和任何请求的文件加载一次,但为了干净的代码,也只在一个地方加载。谢谢!

use myapp;

基本上是

BEGIN {
   require myapp;
   import myapp;
}

require myapp;执行myapp.pm(如果尚未执行)。换句话说,无论您在一个进程中执行多少次use myapp;,该文件都只会执行("加载")一次。

import myapp;调用myapp::import()如果它存在,以便导出内容。假设myapp导出my_sub,这就是您的代码不起作用的原因。

您有两种选择。

  1. 调用myapp包中的mysubmyapp::my_sub(...)
  2. 使用
  3. use myapp; 为调用的每个包中的my_sub创建本地名称my_sub以便只需使用 my_sub(...) 即可调用它。(这myapp出口my_sub

命令 use myapp; 只会加载一次 myapp.pm 文件,即使多次调用也是如此。但是每次它调用导入例程都会使my_sub()可用(假设您使用导出器或其他东西导出它),而无需编写myapp::my_sub()。

相关内容

  • 没有找到相关文章

最新更新