在/ 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文件??
谢谢, 格利扬
答案 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
目录也会阻止代码死亡。
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;
。
从长远来看,您应该将模块放置在稳定的位置,并且