Perl 5中父级和基础有什么区别?

时间:2009-05-18 06:36:50

标签: perl subclass pragma

似乎有一个名为parent的新编译指示与base大致相同。 parent做了什么保证新的(非核心)模块?我错过了什么?

2 个答案:

答案 0 :(得分:49)

base尝试做太多事情 - 自动处理加载模块,但也允许从已加载的类(可能来自名称不基于模块名称的文件)建立继承。为了使其有效,有些hackery在某些情况下会导致令人惊讶的结果。不是破坏向后兼容性,而是使用更清晰的语义引入了一个新的替换pragma parent

parent将成为5.10.1的核心模块。

更新:忘记了base处理fields(如果您使用的是fields pragma),parent没有。

答案 1 :(得分:36)

有了ysth提供的额外信息,我能够看到文档中的差异:

base编译指示执行以下操作:

  • 将命名包添加到@ISA
  • 使用require加载与命名包名称相同的模块(除非它检测到包已经加载)
  • 如果与包名称相同的模块不存在,
  • 将不会失败
  • 如果命名包中没有符号,则
  • 死亡
  • 如果命名包中不存在$VERSION,则base将其设置为"-1, set by base.pm"
  • 初始化指定包的fields(如果存在)
  • 不会调用指定包的导入功能

parent编译指示执行以下操作:

  • 将命名包添加到@ISA
  • 使用require
  • 加载与命名包具有相同名称的模块
  • 接受一个选项,告诉它如果与包名称相同的模块不存在则不会死亡