加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

开始块中的perl’requiret’

发布时间:2020-12-16 06:25:15 所属栏目:大数据 来源:网络整理
导读:我有以下代码: #!/usr/bin/env perluse strict;use warnings;use feature 'say';BEGIN { my $supported = undef; *compute_factorial = sub { if (eval { require bignum; bignum-import(); 1;}) { my $num = shift; my $factorial = 1; foreach my $num (1
我有以下代码:

#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';

BEGIN {
       my $supported = undef;
       *compute_factorial = sub { if (eval { require bignum; bignum->import(); 1;}) {
                                    my $num       = shift;
                                    my $factorial = 1;
                                    foreach my $num (1..$num) {
                                        $factorial *= $num; 
                                    }
                                    return $factorial;
                                  }  else {
                                       undef;
                                     } };
       };

my $f = compute_factorial(25);
say $f;

我只是测试一些东西,而不是真正的生产代码……
我的机器上有bignum pragma(使用时可以完全加载),我想知道为什么要求不能正常工作(在这种情况下,我得到的是指数而不是“大数字”)?

谢谢,

解决方法

bignum的import需要在编译它要生效的代码之前调用,否则它不起作用.这里,BEGIN在你的实际compute_factorial调用之前调用它,而不是在关键my $factorial = 1之前调用它;编译.

对于这样的案例,更好的方法就是直接使用Math :: Big *:

if (eval { require Math::BigInt }) {
    my $num = shift;
    my $factorial = Math::BigInt->new(1);
    foreach my $num (1..$num) {
        $factorial *= $num;                            
    }
    return $factorial;
} else {
    undef;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读