2017-02-21 50 views
0

我在library1.pm中調用library2.pm中的函數(func1)。這個函數簡稱爲& func1(),因爲我在library1中聲明瞭「use library2」。但是這是拋出一個錯誤作爲未定義的子程序。但是當我將這個函數調用爲「& library2 :: func1」時,它正在工作。我在這裏錯過任何Perl包嗎?在perl和library1中未定義的子程序:: func1

+1

請提供該問題的最小范例。 – ikegami

回答

2

您是否輸出該功能?由於您沒有發佈任何代碼,因此很難說出您錯過的內容!如果我知道這是什麼,我可以解釋爲什麼你需要缺少什麼。相反,你必須解決一個需要的例子。

library2.pm應包括:

package library2; 

use strict; 
use warnings; 

use Exporter qw(import); 

our @EXPORT = qw(func1); 

... 

sub func1 { ... } 

... 

1; 

library1.pm應包括:

package library1; 

use strict; 
use warnings; 

use library2; 

... 

func1(...) 

... 

1; 

順便說一句,語言的名稱是Perl的,不是PERL。這不是一個縮寫。


順便說一句,你應該停止在子調用前使用&;沒有理由告訴Perl忽略你調用的潛艇的原型。


順便說一句,小寫模塊名稱在技術上保留供Perl使用。但更重要的是,公約保留了用於編譯指示模塊(影響語言的模塊以及詞彙範圍有效的模塊)的小寫模塊。請避免小寫模塊名稱。


順便說一句,

use library2 qw(func1); 

一般比

use library2; 

,因爲它更容易看到潛艇被定義好了,它可以防止意外,如果一個模塊的默認出口不斷變化。

+0

你提到的語法是絕對正確的。但是當我在library1中調用func1而沒有指定library2 :: func1時,則出現錯誤。我想知道它的確切原因,並感謝您的回覆。 –

+1

因爲您沒有發佈任何代碼,所以很難說出您錯過了什麼!如果我知道這是什麼,我可以解釋爲什麼你需要缺少什麼。相反,你必須解決一個需要的例子。如果您要提供問題的演示,我們將能夠提供更多信息。或者至少,您可以告訴我哪些代碼發佈的代碼行中缺少這些代碼。 – ikegami

+0

沒關係。非常感謝你 –