繁体   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