我正在编写一个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。
答案 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();