父母和基地在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加载与命名包相同名称的模块
  • 接受一个选项,告诉它不要死了,如果一个与包相同的名称模块不存在