【问题标题】:Can't locate MyModule/Config.pm in @INC在 @INC 中找不到 MyModule/Config.pm
【发布时间】:2021-03-03 13:04:40
【问题描述】:

我需要在 perl 脚本中使用 MyModule.pm 并将其添加到 @INC

1. use lib "./MyModule";
2. use MyModule::Config;

MyModule 位于与脚本相同的文件夹中,但是当我启动我的脚本时,我有

无法在 @INC 中找到 MyModule/Config.pm(您可能需要安装 MyModule::Config 模块)(@INC 包含:./lib ./MyModule /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) 在 script.pl 第 2 行。 BEGIN 失败——编译在 script.pl 第 2 行中止。

很高兴得到任何帮助

【问题讨论】:

  • 对于您的错误,请参阅此 Perl Maven link
  • 从当前目录到你的模块的路径是什么?

标签: perl


【解决方案1】:

这里有几种可能性。这取决于你的模块是如何编写的。

如果您的模块代码以:

package Config;

那么你需要:

use lib './MyModule';
use Config;

如果您的模块以:

package MyModule::Config;

那么你需要:

use lib '.';
use MyModule::Config;

(第二个选项可能是最好的。)

【讨论】:

  • $RealBin 应该用来代替.。后者依赖于不稳定的假设。
  • (另外,不应使用package Config;,因为它与现有模块冲突)
  • 我的模块Config.pmpackage MyModule::Config; 开头,位于与脚本相同目录的文件夹MyModule 中。但是@INC use lib "./lib"; use strict; use File::Path; use Module::Load; use MyModule::Config; 中没有该路径,我应该使用 use lib '.'; 将它添加到 @INC 中
  • @Duxa:是的。看起来您处于我列出的第二种情况。因此,您应该按照那里的说明进行操作。
【解决方案2】:

https://perldoc.pl/lib 上查看use lib 文档。

您编写的代码正在尝试加载./MyModule/MyModule/Config.pm

另见
https://perldoc.pl/perlmodstyle
https://perldoc.pl/functions/require

HTH

【讨论】:

  • 是的,我已将其更改为 use Config; 并且可以正常工作。但对我来说很奇怪为什么该脚本在use MyModule::Config; 和 MyModule 不在任何目录中时起作用,而在 @INC 中。并且 bash 脚本也像 $PERL script.pl 那样运行 perl 脚本,并且在 script.pl 中有 shebang,它与 $PERL 不同,并且 perl 运行 script.pl
  • 在这种情况下,您应该 use lib "/path/to/here"; use MyModule::Config; 但是由于您似乎还不了解 use() ,请执行以下操作:require "./MyModule/Config.pm"; 这样您就知道您要加载的实际文件.
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 2017-07-13
  • 2013-10-24
  • 2018-01-11
  • 2020-07-15
  • 2018-11-08
  • 2021-11-17
  • 2014-07-09
相关资源
最近更新 更多