有关使用“使用mylib”的perl脚本的问题

时间:2016-01-18 11:32:47

标签: apache perl

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

第4行是“使用mylib;”

如果我发表评论“使用mylib;”脚本执行正常和罚款,但我的所有脚本都有“使用mylib;”并且很难改变所有脚本。是否有任何过程来更新所有perl库的mylib.pm文件??

谢谢, 格利扬

3 个答案:

答案 0 :(得分:1)

  

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

我以为我在my answer to your previous question

中涵盖了这一点

安装mylib没有任何问题。问题是,它在与Perl源文件相同的目录中或在上面的目录中查找名为lib的目录

如果找到这两个目录中的一个,则会将其添加到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目录,并将其添加到搜索列表中,但不会从那里加载任何库

我希望现在明白了吗?

答案 1 :(得分:0)

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;)/#/' {} +

答案 2 :(得分:-2)

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

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

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

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