【问题标题】:having issues with perl scripts having "use mylib"有“使用 mylib”的 perl 脚本问题
【发布时间】:2016-01-18 21:46:19
【问题描述】:

在 /apps/cgi/kb 或 /apps/cgi 中都找不到 lib,停在 /usr/local/share/perl5/mylib.pm 第 22 行。 在 www_kb_search_new_QA.pl 第 4 行的要求中编译失败。 BEGIN 失败——编译在 www_kb_search_new_QA.pl 第 4 行中止。

第 4 行是“使用 mylib;”

如果我评论“使用 mylib;”该脚本执行正常且正常,但我所有的脚本都具有“使用 mylib;”并且很难更改所有脚本。是否有任何程序可以使用所有 perl 库更新 mylib.pm 文件??

谢谢, 卡利安

【问题讨论】:

  • @Borodin 你能帮忙解决这个问题吗.....

标签: apache perl


【解决方案1】:

是否有任何程序可以用所有 Perl 库更新 mylib.pm 文件?

我以为我在 my answer to your previous question 中介绍过这个

您的mylib 安装没有问题。问题是它正在寻找一个名为 lib 的目录,或者在与您的 Perl 源文件相同的目录中,或者在上面的目录中

如果找到这两个目录之一,它会将其添加到 perl 搜索任何后续 use 语句所包含的模块的位置列表中。这就是它所做的全部。当您编写需要与主 Perl 程序文件一起分发的自己的 Perl 模块时使用它

根据您之前的问题,您的一个程序是/apps/cgi/kb/www_kb_search_new.pl,所以mylib 正在寻找其中一个

/apps/cgi/kb/lib

/apps/cgi/lib

并没有找到。这就是错误信息的原因

在 /apps/cgi/kb 或 /apps/cgi 中都找不到 lib

既然你说你的程序在你删除use mylib 时工作正常,那么你的程序似乎没有使用这些位置的任何模块。这可能适用于您的所有程序,在这种情况下,解决方案应该是从所有程序中删除 use mylib 语句。使用简单的 shell 命令很容易做到这一点

或者,您可以创建这些目录中的一个或其他并将其留空。这样mylib 将正确执行,找到lib 目录,并将其添加到搜索列表中,但不会从那里加载任何库

我希望现在清楚了吗?

【讨论】:

  • 谢谢@Borodin,在 /aps/cgi 中创建 lib/ 运行良好,apache 正在通过正确获取库来执行脚本。
【解决方案2】:

use mylib; 用于告诉 Perl 在哪里可以找到相对于脚本安装的模块。这些通常是与脚本捆绑在一起的纯 Perl 模块。它查找./lib../lib(相对于脚本所在的位置)。在您的情况下,这些目录都不存在。

脚本期望有一个不存在的lib 目录这一事实表明您缺少一些文件。如果是这样,删除use mylib; 只会让事情变得更糟。

如果不存在lib 目录,则不应使用use mylib; 并应将其删除(这可以使用单行[1] 轻松完成)。在您的脚本所在的目录中创建一个空的lib 目录也会阻止您的代码死亡。


  1. find -name '*.pl' -type f -exec perl -i~ -pe's/^(?=use mylib;)/#/' {} +

【讨论】:

    【解决方案3】:

    'mylib.pm' 不在 PERL5LIB 环境变量中列出的目录中。

    在测试时,您可以使用use lib 'path/to/module' 解决方法。

    因此,如果您正在测试使用模块 libs/mylib.pm 的文件 myscript.pl,您可以在 use mylib; 命令之前添加 use lib 'libs/';

    从长远来看,您应该将模块放置在稳定的位置,并且

    【讨论】:

    • 不,错误不是找不到mylib.pm
    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2021-07-29
    • 2014-12-29
    • 2014-12-07
    • 2013-03-11
    相关资源
    最近更新 更多