我们将旧服务器上的所有内容移动到新服务器上。我们新服务器上的一个网站使用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。
答案 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。