sno*_*kin 5 perl module runtime require
我有以下代码:
#!/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;
Run Code Online (Sandbox Code Playgroud)
我只是测试一些东西,而不是真正的生产代码...... bignum我的机器上有pragma(完全可以加载使用use),我想知道为什么require不能正常工作(我得到指数而不是"大数字")在这种情况下?
谢谢,
bignum 的导入需要在编译它想要实现的代码之前调用,否则它不起作用。在这里,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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |