gpt4 book ai didi

perl - 为什么即使我用 FindBin 调整了@INC,我的 Perl 脚本也找不到我的模块?

转载 作者:行者123 更新时间:2023-12-01 16:50:58 25 4
gpt4 key购买 nike

我希望能够使用保存在我的源代码存储库的 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 block 。

如果是这种情况,那么我还没有找到正确的语法。

编辑 2: 根据下面的评论,我意识到我的假设可能有缺陷。我的理由是:如果我直接引用实际代码“.pm”,那么我应该能够在不使用包管理器的情况下使用它。也许事实并非如此,或者如果我想这样做,也许我必须以不同的方式来做。或者,我可能必须重构“.pm”中的代码。

编辑 3: 我认为我误解了一些事情。我的 IDE 中的错误消息“Compilation failed in require”,它突出显示了我用来包含模块的行,以及控制台错误消息“无法找到模块 Win32::Console::ANSI 的可加载对象”

我读到它是加载模块本身的问题,但它似乎是模块本身试图加载的东西导致的问题。有趣的是,这只是一个问题,因为我没有使用 ppm 安装。

它正在寻找实际的模块。我能够通过注释掉故障线来验证这一点。

感谢您的帮助,但我将不得不花更多的时间。

最佳答案

参见 perldoc perldiag在“找不到模块的可加载对象...”下:

    (F) The module you loaded is trying to load an external library,
like for example, "foo.so" or "bar.dll", but the DynaLoader module
was unable to locate this library. See DynaLoader.

你是对的,这个问题是由模块试图加载的东西引起的——这就是Dynaloader。做。但是,Win32::Console::ANSI 的文档没有提及任何外部库要求。

关于perl - 为什么即使我用 FindBin 调整了@INC,我的 Perl 脚本也找不到我的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com