gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:35:15 26 4
gpt4 key购买 nike

我的问题如下

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

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

    我创建了环境参数
    setenv def ./abc/def 
    setenv xyz ./abc/xyz

    我尝试了以下解决方案
  • Begin { push(@INC, $ENV{def}."/lib" ) }除了为我使用的其他库提供路径
    使用库 $ENV{xyz}."/lib"

    这个解决方案没有奏效。我收到错误消息,说 ./abc/def/lib 中的库
    不包括在内。
  • 我试过 FindBin
    # for the libs present in ./abc/def/lib
    use FindBin;
    use lib "$FindBin::Bin/../../";
    use mylib::abc;
    use mylib::def;

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

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

    最佳答案

    你不说你有什么问题。只是说你“不确定为什么它不起作用”并没有真正的帮助。我假设您收到“无法在 @INC 中找到 [某些模块]”错误。

    更改 @INC 的值的三种(推荐)方法.各有各的用途。

  • 在程序内部,您可以使用 use lib
  • 从命令行(或在 shebang 中),您可以使用 -I
  • 在你的 shell 环境中,你可以设置 PERL5LIB

  • 在所有这些情况下,新目录都将添加到 @INC 的开头。 ,所以这些目录将在标准库目录之前被搜索。

    也可以手动操作 @INC .请注意,为了手动操作 @INCuse 有任何影响代码中的语句,它们需要在 BEGIN 中执行 block (因为 use 语句在编译时执行)。看起来您也尝试过,但是您使用了 Begin而不是 BEGIN - 这行不通。

    如果您从与保存库的目录完全无关的位置运行程序,则 FindBin可能用途有限。 FindBin 在可执行文件的位置和库密切相关的情况下很有用(例如,可执行文件在 ./bin 中,而库在 ./lib 中)。

    您似乎也在尝试调整 @INC来自图书馆 ( ./abc/xyz/lib/tuv/abc.pm)。注意 FindBin 不会设置 $FindBin::Bin到这个目录。 $FindBin::Bin始终设置为包含正在运行的可执行文件的目录。

    在不了解您正在使用的实际路径的更多信息(您在示例中只给出了相对路径)的情况下,很难确定最好的方法是什么。但我认为在你的情况下我会设置 PERL5LIB到您的额外库的绝对路径。

    关于perl - 包含来自不同位置的 perl 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824743/

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