2015-11-20 82 views
-1

如何使用從Windows安裝在Linux服務器上的模塊? 我嘗試使用libBEGIN添加模塊路徑@INC, 但它拋出一個錯誤在Windows上使用Linux服務器上的Perl模塊

無法找到xyz.pm在@INC

這些模塊不適用於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

你有一堆與SSH有關的代碼。你問你如何使用SSH遠程加載模塊? – Quentin

+0

這讓我想到Object :: Remote,但是反過來。 – simbabque

+0

你收到的實際信息是什麼,文件的完整路徑是什麼? – ikegami

回答

3

這裏有兩個問題。

首先,它聽起來像是在嘗試從遠程系統加載模塊。最簡單的方法是將遠程文件系統安裝到本地系統上(使用NFS或類似的方式)。遠程文件系統將在您的本地系統上有一個路徑,您可以將其放入@INC。另一種選擇是使用類似Object::Remote的東西,但我認爲這可能相當困難。

你的第二個問題是你想要使用爲Windows系統上的Linux系統構建的模塊。現在,大多數Perl模塊都是用純Perl編寫的,這意味着它們主要是跨平臺的。但是一些模塊有一個需要編譯的組件。這些不能用於構建它們的平臺之外的其他平臺上。我們對你的模塊一無所知,所以我們不知道這是否會對你造成問題。

但我認爲,總而言之,你要以錯誤的方式解決這個問題。更好的解決方案是將這些模塊安裝在本地Windows系統上。你說他們在CPAN的PPM上不可用。在這種情況下,您需要找出它們來自哪裏(可能通過閱讀文檔),並查看是否可以找到在Windows上安裝它們的說明。無論如何,如果它們是純粹的Perl模塊,這可能很簡單,因爲將它們複製到正確的模塊庫目錄。

最後一個註釋。您行:

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

更通常(多maintainably)寫爲:

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機器什麼都不知道這個目錄有關。

相關問題