2009-10-01 47 views
1

我有perl模塊文件和測試腳本pl,我用它來運行一些功能,並在browsing through the use libthis previous question here... 我仍然不知道如何做到這一點。如何強制Perl僅從測試目錄運行模塊?

基本上我有一個包含模塊文件的生產目錄,我有一個包含相同模塊和測試腳本文件的測試目錄文件。每次我嘗試運行腳本文件時,它都會自動調用目錄中的模塊。通過打印出@INC,生產目錄似乎託管在那裏。因此,我嘗試使用

no lib qw(prod_dir); 

將其刪除,並同時打印出@INC顯示該目錄已經不存在,不知何故腳本仍在調用其他模塊...

我大概知道這個聽起來真的很愚蠢,但希望有人能幫助我看到這裏的光:) 謝謝。

+0

'BEGIN {@ INC ='test'}'可能有效。 – 2009-10-01 17:24:45

回答

6

如果您有require d或use d模塊,請檢查%INC以查看它來自哪裏。

例如:

use Data::Dumper; 
print $INC{'Data/Dumper.pm'}."\n"; 

注意 「::」 變爲 「/」 你追加 「.pm的」。這可能會給你一個線索。

請記住,當前目錄(「。」)通常是@INC中的一個條目。但第一步是找出模塊從哪個目錄加載。

要記住的另一件事是@INC中的目錄是按順序搜索。 use lib預先添加到該列表(使其成爲第一個搜索的目錄),因此您可能只需添加相應的目錄即可。

2

你能說更多關於你想要做什麼以及你如何去做的嗎?這是東西在一個標準的Perl分佈結構?如果你不使用標準的分佈結構,你能向我們展示一個目錄列表,這樣我們就知道事物在哪裏了嗎?你還可以包含你用來加載模塊的代碼嗎?當您將細節彙總在一起時,只需更新您的原始問題。

通常,我通過build runner運行測試,它會自動設置正確的@INC

如果我想運行在我分配一個測試,我用的是blib模塊發現其中有我的模塊的開發版本構建庫:

% perl -Mblib t/test.t 

有些人做同樣的事情與prove

如果您未使用基本分配設置,請考慮使用它。工具和最好的技術依賴於它。

如果您剛剛將模塊和測試文件放在同一個目錄中,您是否嘗試過使用PERL5LIB將當前目錄添加到@INC

+0

@Brian - 是的,這是mod perl,我們有一個目錄,我們通常會存儲我們正在使用的額外pm文件的其餘部分。我想可能有一些循環依賴或在這裏引起這個問題的東西:( – melaos 2009-10-06 08:03:16

相關問題