2014-09-13 88 views
0

我正在使用Windows操作系統並且我有我的運行perl腳本。在我的腳本Path::Class::Rule模塊中我正在使用。如何使用系統命令安裝cpan模塊 - perl

我的腳本無法在某些系統上運行,因爲上面提到的模塊沒有安裝。所以我需要添加一個預設置邏輯,它將檢查所有需要的模塊是否安裝在如果不是,那麼先安裝模塊,然後執行其餘的處理。

我想安裝模塊使用system subroutine但perl模塊沒有得到安裝。

這裏是我使用的代碼:

use warnings; 
use Path::Class; 
use Path::Class::Rule; 
use Cwd qw(); 
use File::Path qw(make_path); 
use File::Copy; 
system ("ppm install Path::Class::Rule"); 

任何機構可以幫助我如何添加什麼邏輯?

+0

在Windows - 轉到啓動,並在運行框中鍵入PPM則窗被打開,他們可以找到perl模塊。頂部有perl模塊的安裝選項標記。點擊後你的模塊被安裝。我相信Path :: Class:Rule被找到並且可用。 – Praveen 2014-09-13 06:12:09

+0

我需要僅在當前的perl腳本中添加邏輯。我不想要任何手動干擾。我已檢查標記爲安裝選項,因爲你建議,但我可以看到它在這裏被禁用。我必須更新perl嗎? – user59053 2014-09-13 06:21:45

+0

請不要這樣做。您可以隨程序發運必要的文件。最重要的是,重寫你的程序使用['File :: Spec'](https://metacpan.org/module/File::Spec)和 ['File :: Find']](https:// metacpan。 org/module/File :: Find),它們是核心模塊。 – Borodin 2014-09-13 13:05:34

回答

1

看看這個:

use Path::Class::Rule; 
...; 
system ("ppm install Path::Class::Rule"); 

你試圖use模塊之前安裝它。

嘗試這樣的:

BEGIN { 
    eval { require Path::Class::Rule } 
     or system("ppm install Path::Class::Rule"); 
} 
use Path::Class::Rule; 

雖然我個人認爲一個更好的想法是這樣的:

BEGIN { 
    eval { require Path::Class::Rule } 
     or die "Missing Path::Class::Rule. See README for installation instructions.\n"; 
} 
use Path::Class::Rule;