代码之家  ›  专栏  ›  技术社区  ›  Keith Bentrup

为什么我的Perl脚本即使在我用FindBin调整@INC之后也找不到我的模块?

  •  2
  • Keith Bentrup  · 技术社区  · 15 年前

    我希望能够使用保存在源代码存储库lib目录中的模块,并且我希望开发人员使用我正在编写的脚本的唯一先决条件是具有

    在我的脚本中,我有

    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目录中,似乎仍然需要 百万分之一 请注意该模块。

    百万分之一 第一。我想应该有办法解决这个问题。

    我知道这可能是一个非典型的要求,但我的目标可能是非典型的。我只希望开发人员执行签出并立即使用一些脚本,而不必运行其他命令或使用包管理器。

    编辑:

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

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

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

    谢谢你的帮助,但我得多花点时间。

    5 回复  |  直到 4 年前
        1
  •  3
  •   Ether    15 年前

    看见 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 未提及任何外部库要求。

        2
  •  2
  •   jheddings    15 年前

    lib 目录
    i、 e.您的模块应位于路径中 $Bin/lib/Some/Module.pm .

        3
  •  2
  •   brian d foy    15 年前

    从…起 perlfaq8 对的回答 How do I add the directory my program lives in to the module/library search path?

    你似乎做得对,但如果你希望得到帮助,你需要给我们更多。

    当你运行这个脚本时,会得到什么结果 @INC ? 放入调试行,如:

     BEGIN {
          use lib ...;
          print "INC is \@INC\n"; 
          }
    

    检查输出是否显示您期望的目录。如果没有,从那里开始把问题一分为二。

        4
  •  1
  •   Otiel user577803    13 年前

    试试这个:

    BEGIN {
        use FindBin qw($Bin);
    }
    use lib "$Bin/lib"; # store non standard modules here
    
        5
  •  0
  •   Kurt W. Leucht    15 年前

    我手动安装模块的所有时间,它似乎工作。我只是将目录和文件复制到一个位置,并使用如您所示的“use lib”指令。有时我会错过一个文件,我会遇到运行时错误,它正在查找某个文件,我会在Internet上找到该文件,并将其放在正确的位置,然后它就会工作。不确定你的设置是怎么回事。这应该行得通。

    我通常将perl模块放在与脚本相同的目录中,然后:使用lib“