如何使用Windows上安装在Linux服务器上的模块?
我尝试使用lib
和BEGIN
添加@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";
答案 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机器对此目录一无所知。