Perl CPAN 发行版中 $AUTHORITY 变量的用途是啥?

Posted

技术标签:

【中文标题】Perl CPAN 发行版中 $AUTHORITY 变量的用途是啥?【英文标题】:What is the purpose of the $AUTHORITY variable in a Perl CPAN distribution?Perl CPAN 发行版中 $AUTHORITY 变量的用途是什么? 【发布时间】:2021-03-17 00:26:41 【问题描述】:

根据Dist::Zilla::Plugin::Authority:

此插件将权限数据添加到您的分发中。它增加了 数据到您的模块和元数据。通常它会寻找 PAUSE 您的 Dist::Zilla 配置中的作者 ID。

“权限数据”是做什么用的?为什么要添加到所有模块中?

另见Dist::Zilla::Plugin::PERLANCAR::Authority

【问题讨论】:

我想是给this module 【参考方案1】:

在 Raku 中,一个模块(实际上是任何类型)可以有 attributes :ver<>:auth<>:api<>。这允许您向其传递版本、作者和/或 API 编号,您可以随后对其进行自省。

class C:ver<4.2.3>:auth<github:jane>:api<1> 
say C.^auth;      # OUTPUT: «github:jane»

在 Perl 中,包的权限可以这样定义:

package MyApp;
BEGIN  $MyApp::AUTHORITY = 'cpan:JOEBLOGGS'; 

授权应该是标识负责发布包的人员、团队或组织的 URI。伪URI方案cpan:是最常用的标识符。

$AUTHORITY 包变量可以与authority pragma 一起使用,根据其权限有条件地加载模块:

use authority 'cpan:JOE', My::Module => qw();

假设@INC 路径是/opt/perl/lib,那么Perl 将在尝试通常的/opt/perl/lib/My/Module.pm 之前尝试加载/opt/perl/lib/cpan_3A_JOE/My/Module.pm

还有一个已定义的$AUTHORITY,使用UNIVERSAL::AUTHORITY::Lexical 启用模块权限自省。例如:

use UNIVERSAL::AUTHORITY::Lexical;
if (html::HTML5::Writer->AUTHORITY ne HTML::HTML5::Builder->AUTHORITY)

  warn "Closely intertwined modules with different authors!\n";
  warn "There may be trouble ahead...";

use UNIVERSAL::AUTHORITY::Lexical;
# Only trust STEVAN's releases
Moose->AUTHORITY('cpan:STEVAN'); # dies if doesn't match

有关此变量的原始讨论,另请参见 our $AUTHORITY。

【讨论】:

以上是关于Perl CPAN 发行版中 $AUTHORITY 变量的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

是否有适用于 Perl 6 的类似 CPAN/CPAN6 的项目?

perl cpan 安装与 GIT Perl cpan 安装冲突我该如何纠正?

centos环境下使用CPAN安装perl模块

卸载 cpan 安装的所有 perl 模块

我用 CPAN 成功安装了一个模块,但是 perl 找不到它。为啥?

安装Perl的CPAN模块