![](/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.