【问题标题】:Where is the documentation for Perl's builtin `Internals::` package?Perl 的内置 `Internals::` 包的文档在哪里?
【发布时间】:2010-06-04 19:45:39
【问题描述】:

当使用keys %:: 获取当前加载的根命名空间列表时,默认加载Internals:: 包(以及UNIVERSAL:: 和其他一些)。但是,我还没有找到Internals::中的函数的任何文档

keys %{Internals::} 返回SvREFCNT hv_clear_placeholders hash_seed SvREADONLY HvREHASH rehash_seed

所有这些都可以在 Perl 的 C API 文档中查找,但是是否有任何 Perl 级别的文档呢?包稳定吗?它被几个核心模块使用(一个是Hash::Util),所以我想是的,但是缺少文档有点麻烦。

我在 Perl 发行版中没有看到 Internals.pm(可能有不同的名称?),它不是 CPAN 上的 Internals 模块。

注意:我完全理解Internals:: 中的函数具有潜在的危险性,我没有考虑任何特殊用途。我正在阅读Hash::Util 的源代码并发现了它。

【问题讨论】:

    标签: perl module internals


    【解决方案1】:

    IIRC 代码不是 Internals.pm 而是 libinternals.c。看起来他们曾经在 universal.c in Perl 5.8 中但被迁移出去了。

    根据 03/2009 和 Perl 5.10,它们没有按照 this perlmonks thread 记录。

    另外,在同一个线程中,ysth 声明:

    universal.c 中未记录的内容 不应该依赖;他们应该 仅由核心模块使用。他们 没有记录在案,以允许 随时更换 然而必要。出于这些目的, 该代码是足够好的文档。

    【讨论】:

    • universal.c 中的 cmets 很棒:/* This is dangerous stuff. */ ... /* I hope you really know what you are doing. */
    • "...代码是足够好的文档"——这不会阻止人们针对当前实现编写代码并在进行更改时看到它崩溃。
    • 您之前提供的链接 - perlbin.sourceforge.net/perlcompiler/perl.internals.pdf - 看起来很有趣,尽管它似乎已经过时了。
    • @Ether - 它似乎并没有集中在解释 internals:: module (这可能在编写之后就凝聚在一起了?)所以,虽然很有趣,但我认为它与此无关问。
    • @Eric - 在一个有趣的时机,我今天发布了 Perl 模块的初始版本,其中有一条评论:# Now, for the voodoo. DON'T MESS WITH THIS CODE IF YOU DON'T KNOW WHAT YOU ARE DOING - deep Perl magic!。实际上,魔术更像是大卫科波菲尔而不是伏都教,但目标受众与可能正在阅读 libinternals.c 的人相差甚远:)
    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2019-03-07
    • 1970-01-01
    • 2017-04-08
    • 2015-02-21
    • 2014-06-27
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多