父母和基地在Perl 5有什么区别?
似乎有一个名为parent
的新的编译指南,做base
大致相同的事情。 parent
做了什么来保证一个新的(非核心)模块? 我错过了什么?
base
试图做太多的事情 – 自动处理加载模块,但也允许从已经加载的类(可能来自一个文件的名称不是基于模块名称)build立inheritance。 为了使其工作,有些骇客在某些情况下造成了惊人的结果。 而不是打破向后兼容性,一个新的,replace的编译指示的parent
被引入更干净的语义。
parent
将成为5.10.1的核心模块。
更新:忘记了base
处理fields
(如果您正在使用fields
杂注),哪些parent
不做。
用来自ysth的额外的信息武装,我能够看到在文档中的差异:
base
杂注做了以下事情:
- 将指定的包添加到
@ISA
- 使用
require
加载与命名包相同名称的模块(除非它检测到包已经加载) - 如果与包相同的模块不存在,则不会失败
- 如果命名包中没有符号,则会死亡
- 如果命名包中不存在
$VERSION
,则base将其设置为"-1, set by base.pm"
- 初始化指定包的
fields
(如果存在) - 不调用命名包的导入function
parent
编译做了以下的事情:
- 将指定的包添加到
@ISA
- 使用
require
加载与命名包相同名称的模块 - 接受一个选项,告诉它不要死了,如果一个与包相同的名称模块不存在