簡體   English   中英

如何在perl的另一個模塊中使用一個模塊?

[英]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。

你可以在這里看到 DB.pm 代碼

所示代碼中的直接錯誤是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM