Perl eval('use someModule;')被多次调用。是否也多次评估?

时间:2018-10-22 10:20:13

标签: perl module eval

我必须处理使用

的安全代码
eval('use someModule');

在函数中,并在运行时评估模块。

不幸的是,带有此eval块的函数被多次调用。 现在的问题-每次调用带有此块的功能时Perl是否会评估模块? -还是Perl足够聪明,可以跳过第二轮评估? 并有一种方法可以确定这一点吗?

我已经在模块的BEGIN块中尝试了一些全局变量计数,但是我不确定这是否是足够的测试。

1 个答案:

答案 0 :(得分:3)

use someModule

等效于:

BEGIN { require someModule; someModule->import(); }

require要求包含一个库文件(如果尚未包含的话)。

因此someModule将仅被读取和编译一次,但是其import子(如果有的话)将为每个use被调用一次。