2013-03-14 66 views
8

我正在查看Perl发行版中base.pm的来源,我没有看到它与“非实用”模块有什么区别。如果use base是一个“编译指示”,它是否与use Foo有任何根本的不同,其中Foo是任何模块?是什么使模块成为实用模块?

回答

7

编译指示没有明确的定义。最接近官方的是perlpragma

  • 他们通常修改语言或语法分析器的行为。
  • 他们的影响通常在词汇范围内。

我个人认为这些都是要求(它似乎是perlpragma确实太少),但核心模块varssubs都记录是编译指示,即使他们的效果并不词法范围。

baselib不符合任一标准。他们所做的是向“Perl本身”提供信息。我想这也可以作为一个附注。

我认为我的模块use syntax qw(loop);是务实的。 (无耻插头!)

+0

忘了实际覆盖base.pm.解决了这个遗漏。 – ikegami 2013-03-14 23:42:45

+0

我的评论成了它自己的答案:-) – 2013-03-15 01:37:28

1

虽然名字是在很多情况下经常使用,我通常认为一个编译为一个使用提示哈希%^H作为perldoc perlpragma记录什么的。这意味着主要区别是动作必须在编译时; use工作,而require(不在BEGIN)不工作。这是“实用模块”(通过这个定义)与其他模块之间的主要区别。通过该定义,vars,subs,baselib都不是编译指示。