分析CPAN模块的来源我可以看到如下:
... package # hide from PAUSE Try::Tiny::ScopeGuard; ...
很明显,这是从Try :: Tiny取得的,但是我也在其他模块中看到了package关键字和包标识符之间的这种意见.
为什么要使用这个程序?它的目标是什么,它有什么好处?
解决方法
从PAUSE的索引器中隐藏一个包的确是一个黑客.
当分发上传到PAUSE时,索引器将检查上传中的每个文件,查找分发包中包的名称.任何索引的包都可以显示在CPAN搜索结果中.
索引器不希望发现您的软件包有很多原因.您的发行版可能会有许多小型或微不足道的软件包,会使模块的搜索结果混乱.您可能在t(测试)目录或其他非标准目录中定义了软件包,这些目录不会作为分发版本的一部分进行安装.您的发行版可能包含来自完全不同的分发文件(其他人写的).
hack的工作原理是因为索引器严格查找关键字包和在同一行上看起来像包名称的表达式.
如今,您可以在发行版中添加Meta.yml文件. PAUSE索引器将在此文件中查找并遵守no_index规范.但是,这是索引器的一个相对较新的功能,因此旧版模块和旧版CPAN贡献者仍将使用换行符.
以下是Forks::Super
的no_index规范示例
no_index: directory: - t - inc package: - Sys::cpuAffinity - Signals::XSIG - Signals::XSIG::Default - Signals::XSIG::TieArray56
Sys :: cpuAffinity和信号:: XSIG是独立的分发,也与Forks :: Super包装.一些测试脚本包含不应该编入索引的包声明(例如Arbitrary::Test::Package
).