perl - 为什么 "package"关键字有时会用注释与包名隔开?

标签 perl

分析 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::CpuAffinitySignals::XSIG是单独的发行版,也与 Forks::Super 一起打包.一些测试脚本包含 package不应编入索引的声明(例如 Arbitrary::Test::Package )。

关于perl - 为什么 "package"关键字有时会用注释与包名隔开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921807/

相关文章:

linux - 如何在perl中创建依赖进程

php - 匹配初始化的整数值

perl - 使用 Perl 从 Excel 电子表格中读取法语字符

xml - Perl 5.8.8 不支持 XML::LibXML 吗?

perl - 在 Perl 中访问具有子进程的数组

sql - Perl DBI SQL 字符串错误

perl - 在 perl 中替换匹配后的下一行

multithreading - Perl线程: is exit needed?

regex - Perl,从正则表达式匹配分配给变量

Perl : constant & require