2010-06-04 41 views
6

當使用keys %::來獲取當前加載的根名稱空間的列表時,默認情況下會加載Internals::程序包(以及UNIVERSAL::和其他一些程序包)。但是,我還沒有發現對功能中的任何文檔中Internals::Perl的內置`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的來源閱讀並發現它。

回答

5

IIRC代碼不是Internals.pm,而是libinternals.c。看起來他們曾經在universal.c in Perl 5.8但被遷出。

根據03/2009和Perl 5.10,它們沒有按照this perlmonks thread記錄。

而且,在同一個線程,ysth狀態:

在universal.c 無證東西不應該依賴;他們應該只有核心模塊使用 。他們 沒有故意記錄,允許 他們被更改,只要和 然而是必要的。對於這些目的, 的代碼是足夠好的文檔。

+1

'universal.c'中的註釋很棒:'/ *這是危險的東西。 * /'......'/ *我希望你真的知道你在做什麼。 * /' – 2010-06-04 20:14:18

+0

「...代碼是足夠好的文檔」 - 這不會阻止人們針對當前實現編寫代碼,並在發生更改時看到代碼被破壞。 – Ether 2010-06-04 20:16:49

+0

您之前提供的鏈接 - http://perlbin.sourceforge.net/perlcompiler/perl.internals.pdf - 看起來很有趣,雖然看起來很過時。 – Ether 2010-06-04 20:19:11