Alb*_*lby 6 perl cygwin module
我正在尝试使用名为Math :: Counting的模块:
#!/usr/bin/perl
use strict;
use warnings;
use Math::Counting;
my $f = factorial(3);
print "$f\n";
Run Code Online (Sandbox Code Playgroud)
然而,当我运行它时,我收到以下错误
$ perl UsingModules.pl
Undefined subroutine &main::factorial called at UsingModules.pl line 8.
Run Code Online (Sandbox Code Playgroud)
似乎功能factorial没有被导出,但为什么呢?
当我使用以下内容时
my $f = Math::Counting::factorial(3);
Run Code Online (Sandbox Code Playgroud)
而不是上面的,它完全正常,但我很好奇为什么功能无法导出.
我perl在Cygwin上使用v5.10.1.
Math :: Counting看起来有点傻(我的意思是学生与工程模式?)模块提供的实际因子函数bfact是一个很薄的包装器Math::BigInt::bfac.所以,只需使用Math :: BigInt.
#!/usr/bin/env perl
use strict; use warnings;
use Math::BigInt();
print Math::BigInt->bfac('300'), "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
30605751221644063603537046129726862938858880417357699941677674125947653317671686 74655152914224775733499391478887017263688642639077590031542268429279069745598412 25476930271954604008012215776252176854255965356903506788725264321896264299365204 57644883038890975394348962543605322598077652127082243763944912012867867536830571 22936819436499564604981664502277165001851765464693401122260347297240663332585835 06870150169794168850353752137554910289126407157154830282284937952636580145235233 15693648223343679925459409527682060806223281238738388081704960000000000000000000 0000000000000000000000000000000000000000000000000000000
不,我没有验证结果.
正如其他人所说,Math::Counting有:
our @ISA = qw(Exporter);
our @EXPORT = qw(
factorial permutation combination
bfact bperm bcomb
);
Run Code Online (Sandbox Code Playgroud)
但没有require 出口商.
实际上,此模块不需要从Exporter 继承.一个简单的:
use Exporter 'import';
Run Code Online (Sandbox Code Playgroud)
本来就够了.此外,默认情况下确实不需要污染此模块的用户的命名空间,因此它应该具有:
our @EXPORT = ();
our @EXPORT_OK = qw(
factorial permutation combination
bfact bperm bcomb
);
Run Code Online (Sandbox Code Playgroud)
否则,定义的重点是%EXPORT_TAGS什么?
模块中有一个错误.Math :: Counting ISA Exporter,但Math::Counting不加载Exporter.
更好:向模块作者提交错误,提供测试用例.
哦,非常有趣.模块作者确实测试了他的功能,但是Test::More进入Exporter,意味着没有注意到模块源的这种遗漏.
Math :: Counting 0.0904已经发布,解决了这个问题.