在Windows上使用Linux服务器上的Perl模块

时间:2015-11-20 12:13:27

标签: linux perl

如何使用Windows上安装在Linux服务器上的模块? 我尝试使用libBEGIN添加@INC的模块路径, 但它会抛出错误

  

无法在@INC

中找到xyz.pm

这些模块在CPAN或PPM上不可用。 这是我的代码:

use strict;
system ("cls");
BEGIN { unshift(@INC, "/usr/local/lib/perl/File") } # path for modules on linux server
use File::article; # module on linux server
use Cwd;
use File::Path;
use Net::FTP;
use Net::SSH::W32Perl;
use Net::Telnet;

my $host;
my $login;
my $password;

$host = "abc.xyz.com";
$login = "login";
$password = "password";

1 个答案:

答案 0 :(得分:3)

这里有两个问题。

首先,听起来你正试图从远程系统加载模块。最简单的方法是在本地系统上安装远程文件系统(使用NFS或类似的东西)。然后,远程文件系统将在您的本地系统上有一个路径,您可以将其放入@INC。另一种选择是使用类似Object::Remote的东西,但我认为可能很难做到正确。

您的第二个问题是您希望在Windows系统上使用为Linux系统构建的模块。现在,大多数Perl模块都是用纯Perl编写的,这意味着它们在很大程度上是跨平台的。但是有些模块有一个需要编译的组件。这些不能用于除了它们之外的平台上。我们对您的模块一无所知,所以我们无法知道这对您来说是否会成为一个问题。

但我认为,总而言之,你正在以错误的方式解决这个问题。更好的解决方案是在本地Windows系统上安装这些模块。你说它们在CPAN的PPM上不可用。在这种情况下,您需要找出它们的来源(可能通过阅读文档),看看是否可以找到在Windows上安装它们的说明。如果它们是纯Perl模块,那么将它们复制到正确的模块库目录可能很简单。

最后一点。你的行:

BEGIN { unshift(@INC, "/usr/local/lib/perl/File") }

通常(并且更可维护)写为:

use lib '/usr/local/lib/perl/File';

(这只是一种很好的做法 - 由于上述原因,它仍然不起作用。)

更新:我刚刚发现了另一个问题。您正在将路径/usr/local/lib/perl/File添加到@INC,然后加载名为File::article的模块。我猜你正在尝试加载的文件是/usr/local/lib/perl/File/article.pm,在这种情况下,你在库路径的末尾有一个额外的“文件”。它应该只是:

use lib '/usr/local/lib/perl/';

但是这仍然无效,因为您的Windows机器对此目录一无所知。