hip*_*ail 13 perl conditional biginteger
我知道我可以在Perl中有条件地使用模块但是"pragma"呢?我的测试表明,use bigint在Perl 中可能比普通数学慢得多,我只需要它来处理64位整数,所以我只想在Perl没有用64位整数支持构建时使用它,我也知道如何检查是否使用该Config模块.
我尝试了各种各样的东西eval和BEGIN块,但无法找到有条件使用bigint的方法.我知道我可以使用Math::BigInt但是我不能为bigint和64位情况使用单个代码路径.
hob*_*bbs 15
这实际上工作得很好:
use Config;
BEGIN {
if (! $Config{use64bitint}) {
require bigint;
bigint->import;
}
}
Run Code Online (Sandbox Code Playgroud)
不同编译时间之间的交互是复杂的(也许我会回来并尝试稍后解释),但足以说因为这里没有字符串eval,bigint设置的标志将持续通过文件的其余部分或阻止您将BEGIN块放入其中.
Sch*_*ern 13
你可以把霍布斯的答案拿到一个模块中.
package int64;
use Config;
sub import {
if (! $Config{use64bitint}) {
require bigint;
bigint->import;
}
}
1;
Run Code Online (Sandbox Code Playgroud)
然后use int64会做你的意思.尽管bigint是词法,但在另一个导入例程中调用它会使它传递它的魔力.