如何在Linux服务器上找到Perl模块的位置?

时间:2016-12-26 22:45:32

标签: linux perl

我们将旧服务器上的所有内容移动到新服务器上。我们新服务器上的一个网站使用Perl后端。当我在浏览器中访问此Perl站点时,它会引发500内部服务器错误。当我从命令行运行Perl脚本时,如下所示:

perl -wc login.pl

我收到此错误:

Can't locate LoadINC.pm

并在login.pl的顶部有这样的:

#!/usr/bin/perl

BEGIN { use LoadINC; }

...

所以看起来新服务器中缺少LoadINC Perl模块。

旧服务器仍在运行,但没有此问题。所以我的想法是在旧服务器上找到LoadINC模块,然后将它放在新服务器上的相同位置。还是有更好的方法?该模块是否隐藏在某些二进制文件中?在两台服务器上寻找Perl模块的地方不一样吗?

另外需要注意的是,旧服务器上的Perl版本是5.8.8,新服务器上的版本是5.16.3。

3 个答案:

答案 0 :(得分:5)

  

如何在Linux服务器上找到Perl模块的位置?

while ((halfHeight / inSampleSize) > reqHeight
            && (halfWidth / inSampleSize) > reqWidth) {
        inSampleSize *= 2;
    }
inSampleSize *= 2;

perl -mFoo::Bar -le'print $INC{"Foo/Bar.pm"}'

在这种情况下,

perldoc -lm Foo::Bar

perl -mLoadINC -le'print $INC{"LoadINC.pm"}'
  

所以我的想法是在旧服务器上找到LoadINC模块,然后将它放在新服务器上的相同位置。或者有更好的方法吗?

我们如何知道如何安装模块?

大多数模块都是使用

之一安装的
perldoc -lm LoadINC

perl Makefile.PL
make test
make install

简单地复制文件可能会有效,但有很多原因可能没有。从好的方面来说,在大多数情况下,你会立即知道它是否有效。

  

在两台服务器上寻找Perl模块的地方不一样吗?

搜索到的目录列表肯定会有所不同(鉴于版本不同),但两个版本可能都有共同的目录。

独立于架构的模块应安装在由以下命令的输出命名的目录中:

perl Build.PL
./Build test
./Build install

答案 1 :(得分:2)

use LoadINC会查找名为LoadINC.pm的文件。 Perl搜索@INC中列出的目录中的模块。你可以用

看到它们
perl -wle 'print for @INC'

@INC由编译的目录列表,环境变量PERL5LIB的内容,命令行上的任何-I选项以及运行代码可能的任何更改组成。做了。

您可以向perldoc询问与模块名称匹配的文件的位置:

perldoc -lm LoadINC

如果您可以加载模块,您也可以询问perl本身:

perl -wle 'use LoadINC (); print $INC{"LoadINC.pm"}'

%INC是一个哈希,它将已加载模块的基本名称映射到其路径。)

答案 2 :(得分:1)

一种方法:

$ perldoc -lm open
/usr/lib/perl5/5.24.1/open.pm

或者大锤方法:

$ locate -r open.pm$
/usr/lib/perl5/5.24.1/open.pm

但是TMTOWTDI