分析 CPAN 模块的来源,我可以看到如下内容:
...
package # hide from PAUSE
Try::Tiny::ScopeGuard;
...
显然,取自
Try::Tiny
, 但是我在 package
之间看到过这种评论其他模块中的关键字和包标识符也是如此。为什么使用这个程序?它的目标是什么,它有什么好处?
最佳答案
从 PAUSE 的索引器中隐藏一个包确实是一种 hack。
当分发上传到 PAUSE 时,索引器将检查上传中的每个文件,查找包含在分发中的包的名称。任何被索引的包都可以显示在 CPAN 搜索结果中。
不希望索引器发现您的包的原因有很多。您的发行版可能有许多小的或无关紧要的软件包,它们会使您的模块的搜索结果变得困惑。您可能在 t
中定义了包。 (test) 目录或其他一些非标准目录,它们不打算作为分发的一部分安装。您的发行版可能包含来自完全不同的发行版(其他人编写的)的文件。
hack 有效,因为索引器严格查找关键字 package
。和一个看起来像同一行上的包名称的表达式。
如今,您可以添加 META.yml
文件与您的发行版。 PAUSE 索引器将寻找并尊重 no_index
此文件中的规范。但这是索引器的一项相对较新的功能,因此旧模块和旧 CPAN 贡献者仍将使用换行破解。
这是 no_index
的示例来自 Forks::Super
的规范
no_index:
directory:
- t
- inc
package:
- Sys::CpuAffinity
- Signals::XSIG
- Signals::XSIG::Default
- Signals::XSIG::TieArray56
Sys::CpuAffinity
和 Signals::XSIG
是单独的发行版,也与 Forks::Super
一起打包.一些测试脚本包含 package
不应编入索引的声明(例如 Arbitrary::Test::Package
)。
关于perl - 为什么 "package"关键字有时会用注释与包名隔开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921807/