13693 次
2 回答
53
base试图做太多的事情——自动处理加载模块,但也允许从已经加载的类(可能来自名称不是基于模块名称的文件)建立继承。为了让它发挥作用,在某些情况下,有一些骇客行为会导致令人惊讶的结果。不是破坏向后兼容性,而是parent引入了具有更清晰语义的新替换编译指示。
parent将成为 5.10.1 的核心模块。
更新:忘记了base句柄fields(如果您使用的是fields编译指示),这parent是不行的。
于 2009-05-18T07:26:50.140 回答
42
借助来自 ysth 的额外信息,我能够看到文档中的差异:
该basepragma 执行以下操作:
- 将命名包添加到
@ISA - 加载与命名包同名的模块
require(除非它检测到包已经加载) - 如果与包同名的模块不存在,则不会失败
- 如果命名包中没有符号,则死亡
- 如果
$VERSION命名包中不存在,则 base 将其设置为"-1, set by base.pm" fields如果存在,则初始化命名包的- 不调用命名包的导入函数
该parentpragma 执行以下操作:
- 将命名包添加到
@ISA - 加载与命名包同名的模块
require - 如果不存在与包同名的模块,则接受一个选项,告诉它不要死
于 2009-05-18T13:43:47.477 回答