我希望能够使用保存在我的源代码存储库的 lib 目录中的模块,并且我希望开发人员使用我正在编写的脚本的唯一先决条件是安装标准的Perl,但我不知道如何做到这一点。
在我的脚本中,我有
use FindBin qw($Bin);
use lib "$Bin/lib"; # store non standard modules here
use Term::ANSIColor;
use Win32::Console::ANSI;
print Term::ANSIColor::colored("this should be in color\n", "bold red");
我把模块放在./lib 中。我验证了这是模块存在的实际位置(通过重命名它并导致它失败)。但是,即使该模块位于任意 lib 目录中,似乎仍然需要ppm了解该模块。
如果没有首先由ppm “安装”,我无法让我的脚本在 lib 中找到/使用它。我想应该有某种解决方法。
我知道这可能是一个非典型的要求,但我的目标可能是非典型的。我只希望开发人员进行结帐并立即使用一些脚本,而无需运行一些额外的命令或使用包管理器。
感谢您的任何见解。
编辑:我更新了一个完整的例子。我还意识到,如果我通过 ppm 卸载它(但将 pm 保留在引用的目录中),我可能必须更改我的语法,而我之前没有考虑过。所以也许我必须给出一个完整的路径或使用像 jheddings 或 BipedalShark 提议的要求(即,如果它没有“安装”,那么我必须使用“要求”并将“.pm”附加到它或使用 BEGIN 块。
如果是这种情况,那么我还没有找到正确的语法。
编辑 2:根据下面的评论,我意识到我可能有一个有缺陷的假设。我的理由是:如果我直接引用实际代码“.pm”,那么我应该能够在不使用包管理器的情况下使用它。也许情况并非如此,或者如果我想这样做,也许我必须以不同的方式来做。或者,我可能不得不重构“.pm”中的代码。
编辑3:我认为我误解了一些事情。我的 IDE 中的错误消息“Compilation failed in require”,突出显示了我用来包含模块的行,以及控制台错误消息“Can't locate loadable object for module Win32::Console::ANSI”
我将其视为加载模块本身的问题,但这似乎是由模块本身尝试加载的某些东西引起的问题。有趣的是,这只是一个问题,因为我没有使用 ppm install 。
它正在寻找实际的模块。我能够通过注释掉故障行来验证这一点。
感谢您的帮助,但我将不得不花更多时间来处理它。