perl – 为什么“包”关键字有时由包名称中的注释分隔?

分析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).

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...