首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于“未定义的子例程”的Perl模块错误

关于“未定义的子例程”的Perl模块错误
EN

Stack Overflow用户
提问于 2012-04-25 22:59:26
回答 5查看 7.7K关注 0票数 6

我正在尝试使用一个名为Math::Counting的模块

代码语言:javascript
运行
复制
#!/usr/bin/perl 

use strict;
use warnings;
use Math::Counting;

my $f = factorial(3);
print "$f\n";

但是,当我运行它时,我得到以下错误

代码语言:javascript
运行
复制
$ perl UsingModules.pl
Undefined subroutine &main::factorial called at UsingModules.pl line 8.

看起来函数factorial没有被导出,但是为什么呢?

当我使用以下代码时

代码语言:javascript
运行
复制
my $f = Math::Counting::factorial(3);

与上面的不同,它工作得非常好,但是我很好奇为什么这个函数不能被导出。

我在Cygwin上使用的是perl v5.10.1。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-25 23:29:04

模块中有一个错误。Math::Counting ISA Exporter,但Math::Counting不加载Exporter

解决方法:您可以手动requireuse Exporter

更好的做法是:向模块作者提交bug,并提供测试用例。

评论:

哦,非常有趣。模块作者确实测试了他的函数,但是Test::More拉入了Exporter__,这意味着模块源代码中的这个省略没有被注意到。

更新:

Math::Counting 0.0904已发布,解决了此问题。

票数 7
EN

Stack Overflow用户

发布于 2012-04-25 23:26:33

Math::Counting似乎缺少require Exporter;,因此它的任何函数都不会被导出到您的命名空间。

票数 2
EN

Stack Overflow用户

发布于 2012-04-26 23:45:33

一位好心人向CPAN提交了一份关于我忘记的require语句的错误报告,在他提醒我之后,我修复了模块导出,包括关于“污染名称空间”的注释。

此外,我在文档中添加了一个说明,即它是用于现实世界应用程序的Math::BigInt->bfac()的“薄包装器”。当我做的时候,我找不到简单的排列或组合的计算方法。现在有太多的..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10318313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档