2013-09-01 30 views
1

那麼,我得到一個名爲Hello.pm的perl模塊,位於/ home/MRS/scripts /中,它有一個簡單的方法,名爲new。Hello.pm的第一行中的包名稱decalration是「package MRS :: scripts :: Hello「。另外,我有一個名爲test.pl的測試腳本,位於與Hello.pm.I相同的目錄中,我試圖在Hello.pm中調用new方法,所以代碼如下所示:我應該如何調用位於perl模塊中的方法?

use Hello; 
use strict; 
our $s = MRS::scripts::Hello->new(); 

,但我得到的錯誤信息;

Can't locate object method "new" via package "Hello" (perhaps you forgot to load "Hello"?) at test.pl line 4. 

我改變Hello.pm包名聲明後,「包你好;」,它works.So,我怎能包名DECL與「包MRS :: scripts :: Hello」一起合作並同時讓通話成功?

+1

錯誤消息中的包與您的代碼不匹配。你實際運行的代碼是什麼? – friedo

+0

這個問題在兩天前爲你解答 - http://stackoverflow.com/questions/18527726/about-perl-use-keyword。那個答案的哪一部分你不明白? –

回答

0

目前還不清楚你是否成功地加載你的模塊(MRS :: scripts :: Hello)。

假設/home/MRS/scripts不在您的系統中,並且您並不總是希望從同一個文件夾運行它,您可以使用alter your include path來提及模塊的位置。 e.g:

use lib '/home'; 
use MRS::scripts::Hello; 
use strict; 

our $s = MRS::scripts::Hello->new; 

如果仍然不能加載模塊,你就必須提供更多的細節(即:該模塊的源,和腳本的相對位置和你的模塊)。

如果腳本始終與模塊位於同一文件夾中,並且在執行perl腳本之前您將始終更改爲該文件夾,那麼您可以改爲use lib '.';

+0

是的,我相信「使用Hello」是成功的,因爲我使用了Test :: More和use_ok('Hello'),它證明了這種使用是成功的。這很容易解釋,因爲@INC有一個項目「。 「,它表示當前目錄,而我的test.pl和Hello.pm確實位於同一目錄中,所以」使用Hello「是成功的。但我不能稱這種方法是新的。 – wuchang

+1

「使用」調用只是使用相同的「路徑」加載模塊文件。文件中的'package'聲明決定了模塊的*名稱*。您對'new'的呼叫必須使用*相同的*名稱。 –