我在library1.pm中調用library2.pm中的函數(func1)。這個函數簡稱爲& func1(),因爲我在library1中聲明瞭「use library2」。但是這是拋出一個錯誤作爲未定義的子程序。但是當我將這個函數調用爲「& library2 :: func1」時,它正在工作。我在這裏錯過任何Perl包嗎?在perl和library1中未定義的子程序:: func1
回答
您是否輸出該功能?由於您沒有發佈任何代碼,因此很難說出您錯過的內容!如果我知道這是什麼,我可以解釋爲什麼你需要缺少什麼。相反,你必須解決一個需要的例子。
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;
,因爲它更容易看到潛艇被定義好了,它可以防止意外,如果一個模塊的默認出口不斷變化。
你提到的語法是絕對正確的。但是當我在library1中調用func1而沒有指定library2 :: func1時,則出現錯誤。我想知道它的確切原因,並感謝您的回覆。 –
因爲您沒有發佈任何代碼,所以很難說出您錯過了什麼!如果我知道這是什麼,我可以解釋爲什麼你需要缺少什麼。相反,你必須解決一個需要的例子。如果您要提供問題的演示,我們將能夠提供更多信息。或者至少,您可以告訴我哪些代碼發佈的代碼行中缺少這些代碼。 – ikegami
沒關係。非常感謝你 –
- 1. Perl:未定義的子程序和主
- 2. Perl:未定義的子程序和main :: gmdate?
- 3. Perl子程序中的未定義變量
- 4. 未定義的子程序和main :: promt
- 5. Perl 1,000子程序重新定義
- 6. 是否有Perl子程序存在和定義?
- 7. ()在Perl的子程序定義中完成了什麼?
- 8. 在Perl中我的叉子過程與「」未定義子程序及主要::致命叫在wrapper.pl」
- 9. 未定義的子程序CGI :: radio
- 10. 我應該如何在Perl中定義'靜態'子程序?
- 11. 未定義的子程序和包::調用子程序<of script>
- 12. 子程序重新定義了Perl中的錯誤
- 13. Perl函數和子程序
- 14. 未定義子程序及主要:: ThrowTemplateError
- 15. 未定義子程序及主要:: key_enc
- 16. 在Backbone.Marionette應用程序中變成「未定義」的子模塊
- 17. 量子結果在未定義的應用程序中:[stdlib,kernel]
- 18. 未定義程序
- 19. 定義未定義鍵的Perl
- 20. 如何處理子程序重新定義錯誤在Perl
- 21. 在實用程序子程序中包裝Perl「死」和「警告」
- 22. Perl HTML ::解析器錯誤;未定義子程序及主要:: 1
- 23. Perl中的未定義數組
- 24. 子程序或函數程序未定義
- 25. Fortran問題與子程序中的未定義語句
- 26. c程序中未定義的引用
- 27. Perl ForkManager子STDOUT子程序
- 28. 意外未定義程序
- 29. 本地$ _在Perl子程序中
- 30. 在Perl子程序中修改變量
請提供該問題的最小范例。 – ikegami