包含来自不同位置的 perl 模块

pup*_*pil 5 perl

我的问题如下

  1. 我的库位于 ./abc/def/lib 位置
  2. 我在路径 ./abc/xyz/lib/tuv/abc.pm 中使用它

我从完全不同的位置运行代码,类似于 ./abc/xyz/blah1/blah2/../../ 。我在这里运行代码。

我已经创建了环境参数

setenv def ./abc/def 
setenv xyz ./abc/xyz
Run Code Online (Sandbox Code Playgroud)

我尝试了以下解决方案

  1. Begin { push(@INC, $ENV{def}."/lib" ) }
    除了提供我使用的其他库的路径之外,还使用 ​​lib $ENV{xyz}."/lib"

    这个解决方案不起作用。我收到错误消息,指出 ./abc/def/lib 中的库未包含在内。

  2. 我尝试过 FindBin

    # for the libs present in ./abc/def/lib
    use FindBin;
    use lib "$FindBin::Bin/../../";
    use mylib::abc;
    use mylib::def;
    
    Run Code Online (Sandbox Code Playgroud)

(我尝试在 FindBin 中给出从哪里开始查找的根路径)

我尝试使用不同的组合,但不确定为什么它不起作用。有人可以指出我做错了什么或者我对 FindBin 的理解错误吗?

Gra*_*ean 0

FindBin模块最适合您的需求。要记住的重要一点是$FindBin::Bin指的是包含脚本的目录。所以当你提到它的时候...

use lib $FindBin::Bin . '/../../etc';
Run Code Online (Sandbox Code Playgroud)

'/../..' 路径必须描述从脚本目录到 lib 目录的路径。

另一个需要考虑的重要事项是错误消息。它将以 - 库搜索路径开始Can't locate Your/Module/Name.pm,然后继续列出@INC- 库搜索路径中的所有目录。检查此目录列表以确保它包含您想要添加的 lib 路径。