2013-08-27 55 views
1

我有自制的#Perl庫,我正在從機器移動到機器,路徑從一個地方到另一個地方都不一樣。具體來說,在舊機器上,它們存在於/ home/foo/lib /中,而它們正在移動到新機器上的/ group/bar/apps/lib,我現在想要將它們放在/ home /我的/ dev /工具/ lib中。如何使用Perl創建條件庫?

我們所做的是有多個使用lib行。 /家/ foo是不可用在新機器上,和/組/條不老的機器上的一個目錄,所以當它看到這一點 -

use lib '/home/foo/lib/' ; 
use lib '/group/bar/apps/lib' ; 
use Tools::Foo ; 

- 一切都很好。

問題是,它們相互鏈接,我寧願沒有在/ home/me/dev/Tools/lib中加載來自/ group/bar/apps/lib的程序,當我移動這東西生產,我不想有任何東西指向〜/ me/dev。優選地,當我將它移入生產時,我不希望修改代碼,因此,在部署所有內容時,diff /group/bar/apps/lib/Tools/Foo.pm /home/me/dev/Tools/lib/Tools/Foo.pm將爲空。

那麼,如何爲多個條件庫位置設置東西?

回答

2

使用下面的編譯

package lib_first_of; 

use lib(); 
use strict; 
use warnings; 

use Carp; 

sub import { 
    foreach my $path (@_) { 
    if (-d $path) { 
     lib->import($path); 
     return 1; 
    } 
    } 

    croak "$0: no suitable library path found"; 
} 

1; 

讓你的主要程序有如下形式

#! /usr/bin/env perl 

use strict; 
use warnings; 

use lib_first_of (
    "/home/foo/lib", 
    "/group/bar/apps/lib", 
); 

use MyModule; 

print "done.\n"; 

如果沒有路徑存在,該計劃失敗,錯誤類似

my-program: no suitable library path found at my-program line 7 
BEGIN failed--compilation aborted at my-program line 9.
10

選項:

  1. 正確安裝模塊。

  2. 將您的模塊相對於腳本

    use FindBin qw($RealBin); 
    use lib "$RealBin/../lib"; # Or whatever. 
    
  3. 使用環境變量PERL5LIB而非use lib

  4. 可以將語句放置在sitecustomize.pl(如果在構建perl時啓用了對sitecustomize.pl的支持)。

+1

+1''sitecustomize.pl'也可以使用,依賴關於構建選項,以達到類似的效果。 – pilcrow

+0

@pilcrow,謝謝,補充說,答案。 – ikegami