如何在perl的另一个模块中使用一个模块?

时间:2017-03-09 06:11:56

标签: perl

我正在编写一个perl脚本,其中iam使用模块 utils.pm ,在utils.pm iam中使用另一个模块 DB.pm ,其中我有一个子例程 connetToDB()

在utils.pm写作

use DB qw (connectToDB());

以及iam将该子程序称为

my $connection=DB::connectToDB();         (This is line 30)

它给出了如下错误。有人可以帮忙吗?

在utils.pm第30行调用未定义的子例程& DB :: connectToDB。

you can see the DB.pm code here

2 个答案:

答案 0 :(得分:4)

显示的代码中的直接错误是qw()内部需要名称use pragma

  

从命名模块

将一些语义导入当前包中

(我的重点)。带括号的“connectToDB()”不是子例程的正确名称。错误消息只是说它没有找到这样的子。

所以只需放下一些parens use DB qw(connectToDB);

该问题的代码已添加到问题中,以下是一些注释。

类似的评论适用于您的@EXPORT - 您需要子程序名称。

Perhaphs更重要的是,您使用prototypes定义了子。你的sub与你使用的原型一致,所以我认为它是故意的。

这是一个非常先进(错误?)的功能,与其他语言中的类似外观设备也有很大不同。有可能你会从他们那里得到错误的东西。去搜索它。我会反对。

在模块中返回的最后一个执行语句必须返回true,否则代码将无法编译。确保这一点的惯例是将1;放在包的末尾。

最后,您不应将模块命名为DB,因为该命名空间由Perl内部使用。此外,这样的通用名称对于模块来说并不好 - 它可以很容易地遇到冲突。

答案 1 :(得分:0)

使用DB qw(connectToDB);

我的$connection=DB->connectToDB();

如果您在DB.pm模块中定义了构造函数“new”,那么

我的$connection=DB->new();

我的$result = $connection->connectToDB();