![](/img/trans.png)
[英]How to call a subroutine from one perl module to another perl module?
[英]How to use one module in another module in perl?
我正在編寫一個 perl 腳本,其中我使用了一個模塊utils.pm,而在utils.pm中我使用了另一個模塊DB.pm ,其中我有一個子例程connetToDB() 。
在 utils.pm 我正在寫作
use DB qw (connectToDB());
在下面我將該子程序稱為
my $connection=DB::connectToDB(); (This is line 30)
它給出了如下錯誤。 有人可以幫忙嗎?
在 utils.pm 第 30 行調用了未定義的子程序 &DB::connectToDB。
所示代碼中的直接錯誤是在qw()
需要names 。 使用 pragma
將一些語義從命名模塊導入當前包
(我的重點)。 帶括號的“connectToDB()”不是子例程的正確名稱。 錯誤消息只是說它沒有找到這樣的子。
所以只需刪除括號, use DB qw(connectToDB);
.
包的代碼已添加到問題中,這里有一些評論。
您的@EXPORT
需要類似的修復:您需要子例程名稱(丟失&
)。
也許更重要的是,您使用prototypes定義了 sub。 您的 sub 與您使用的原型一致,所以我假設它是故意完成的。
這是一個非常高級(錯誤?)的功能,它與其他語言中外觀相似的設備非常不同,通常不需要。 很可能你期望從原型中得到錯誤的東西。 去尋找吧。 我建議反對。
旁注:與原型相關的()
和&
不是子程序名稱的一部分。
在模塊中返回的最后執行的語句必須返回 true,否則代碼將無法編譯。 確保這一點的慣例是把1;
在包的末尾。
最后,您不應該命名模塊DB
,因為 Perl 在內部使用該命名空間。 此外,這樣的通用名稱對模塊不利——它很容易遇到沖突。
使用 DB qw(connectToDB);
我的$connection=DB->connectToDB();
或者
如果您在 DB.pm 模塊中定義了一個構造函數“new”,那么
我的$connection=DB->new();
我的$result = $connection->connectToDB();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.