3

我需要在远程服务器上测试一个 perl 脚本。我尝试运行它,但我得到了错误

Can't locate Date/Manip.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl . 

因此,我下载了 DateManip.pm 文件并尝试将其复制到上述位置之一。但我无权在这些地方复制文件。有没有办法我可以在我自己的目录中拥有这个 *.pm 文件并从那里调用它,或者我必须把它放在其中一个位置?

4

2 回答 2

7

执行此操作的正确方法显然是安装 DateManip.pm,但是如果由于某种原因您不能这样做,那么您可以将模块复制到您具有写入权限的任何目录并修改 perl 脚本以包含以下内容:

 use FindBin qw($Bin);
 use lib "$Bin/<relative_path_to_module>";

<relative_path_to_module>是 DateManip.pm 所在目录的相对路径。因此,如果模块的相对路径是 ../lib,您将拥有

use FindBin qw($Bin);
use lib "$Bin/../lib";
于 2010-08-26T10:49:41.213 回答
3

默认情况下,Perl 也会在当前目录(它正在运行的地方)中查找模块。所以以下将起作用:

./your_program.pl     <= "use DateManip"
./DateManip.pm

如果模块被称为 Date::Manip 那么结构需要是这样的:

./your_program.pl     <= "use Date::Manip"
./Date/
./Date/Manip.pm
于 2010-08-26T11:51:34.583 回答