内容

名称

CPAN::Meta::Requirements - CPAN 发行版的一组版本要求

版本

版本 2.140

概要

use CPAN::Meta::Requirements;

my $build_requires = CPAN::Meta::Requirements->new;

$build_requires->add_minimum('Library::Foo' => 1.208);

$build_requires->add_minimum('Library::Foo' => 2.602);

$build_requires->add_minimum('Module::Bar'  => 'v1.2.3');

$METAyml->{build_requires} = $build_requires->as_string_hash;

描述

CPAN::Meta::Requirements 对象模拟了一组版本约束,例如在 CPAN 发行版的 META.ymlMETA.json 文件中指定的约束,以及由 CPAN::Meta::Spec 定义的约束;它可以通过添加越来越多的约束来构建,并且会将它们简化为最简单的表示形式。

逻辑上不可能的约束将立即通过抛出异常来识别。

方法

new

my $req = CPAN::Meta::Requirements->new;

此方法返回一个新的 CPAN::Meta::Requirements 对象。它接受一个可选的哈希引用参数。目前,只支持一个键

所有其他键都会被忽略。

add_minimum

$req->add_minimum( $module => $version );

此方法添加一个新的最小版本要求。如果新的要求与现有规范冗余,则不会产生任何影响。

最小要求是包含性的。$version 是必需的,以及任何更大的版本号。

此方法返回要求对象。

add_maximum

$req->add_maximum( $module => $version );

此方法添加一个新的最大版本要求。如果新的要求与现有规范冗余,则不会产生任何影响。

最大要求是包含性的。不允许任何严格大于给定版本的版本。

此方法返回要求对象。

add_exclusion

$req->add_exclusion( $module => $version );

此方法添加一个新的排除版本。例如,您可以使用以下三个方法调用

$req->add_minimum( $module => '1.00' );
$req->add_maximum( $module => '1.82' );

$req->add_exclusion( $module => '1.75' );

1.00 和 1.82(含)之间的任何版本都是可以接受的,除了 1.75。

此方法返回要求对象。

exact_version

$req->exact_version( $module => $version );

此方法将给定模块所需的版本设置为完全等于给定版本。任何其他版本都不会被认为是可接受的。

此方法返回要求对象。

add_requirements

$req->add_requirements( $another_req_object );

此方法将给定 CPAN::Meta::Requirements 对象中的所有要求添加到其被调用的要求对象中。如果存在任何冲突,则会抛出异常。

此方法返回要求对象。

accepts_module

my $bool = $req->accepts_module($module => $version);

给定一个模块和版本,此方法返回 true 如果模块的版本规范接受提供的版本。换句话说,给定

Module => '>= 1.00, < 2.00'

我们将接受 1.00 和 1.75,但不接受 0.50 或 2.00。

对于未出现在要求中的模块,此方法将返回 true。

clear_requirement

$req->clear_requirement( $module );

此方法从对象中删除给定模块的要求。

此方法返回要求对象。

requirements_for_module

$req->requirements_for_module( $module );

此方法返回一个字符串,其中包含给定模块的版本要求,格式如 CPAN::Meta::Spec 中所述,如果给定模块没有要求,则返回 undef。 此方法仅用于信息目的,例如错误消息,不应解释或用于比较(请参阅 "accepts_module")。

structured_requirements_for_module

$req->structured_requirements_for_module( $module );

此方法返回一个数据结构,其中包含给定模块的版本要求,如果给定模块没有要求,则返回 undef。 此方法不应用于版本检查(请参阅 "accepts_module")。

在版本 2.134 中添加。

required_modules

此方法返回已指定要求的所有模块的列表。

clone

$req->clone;

此方法返回调用者的克隆。 克隆和原始对象可以独立地进行更改。

is_simple

此方法仅当所有要求都是包含最小值时返回 true,也就是说,如果它们的字符串表达式只是版本号。

is_finalized

此方法在对要求调用 finalize 方法后,如果要求已完成,则返回 true。

finalize

此方法标记要求已完成。 随后尝试更改要求将是致命的,如果它们会导致更改。 如果它们不会更改要求,则它们不会有任何影响。

如果完成的要求集被克隆,则克隆的要求也不会完成。

as_string_hash

此方法返回对哈希的引用,该哈希使用 CPAN::Meta::Spec 规范中的字符串描述要求。

例如,在以下程序之后

my $req = CPAN::Meta::Requirements->new;

$req->add_minimum('CPAN::Meta::Requirements' => 0.102);

$req->add_minimum('Library::Foo' => 1.208);

$req->add_maximum('Library::Foo' => 2.602);

$req->add_minimum('Module::Bar'  => 'v1.2.3');

$req->add_exclusion('Module::Bar'  => 'v1.2.8');

$req->exact_version('Xyzzy'  => '6.01');

my $hashref = $req->as_string_hash;

$hashref 将包含

{
  'CPAN::Meta::Requirements' => '0.102',
  'Library::Foo' => '>= 1.208, <= 2.206',
  'Module::Bar'  => '>= v1.2.3, != v1.2.8',
  'Xyzzy'        => '== 6.01',
}

add_string_requirement

$req->add_string_requirement('Library::Foo' => '>= 1.208, <= 2.206');
$req->add_string_requirement('Library::Foo' => v1.208);

此方法解析传入的字符串,并为给定模块添加适当的要求。 版本可以是 Perl 的“v-string”。 它理解 "CPAN::Meta::Spec 中的版本范围" 中描述的版本范围。 例如

1.3
>= 1.3
<= 1.3
== 1.3
!= 1.3
> 1.3
< 1.3
>= 1.3, != 1.5, <= 2.0

没有运算符的版本号等效于指定最小值 (>=)。 允许额外的空格。

from_string_hash

my $req = CPAN::Meta::Requirements->from_string_hash( \%hash );
my $req = CPAN::Meta::Requirements->from_string_hash( \%hash, \%opts );

这是 CPAN::Meta::Requirements 对象的另一种构造函数。 它接受模块名称和版本要求字符串的哈希,并返回一个新的 CPAN::Meta::Requirements 对象。 与 add_string_requirement 一样,版本可以是 Perl 的“v-string”。 可选地,您可以提供选项的哈希引用,与 "new" 方法完全相同。

支持

Bug 和功能请求

请通过以下问题跟踪器报告任何 Bug 或功能请求:https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements/issues。您将自动收到有关问题进展的通知。

源代码

这是一个开源软件。代码库可供公众根据许可条款进行审查和贡献。

https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements

git clone https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements.git

作者

贡献者

版权和许可

本软件版权 (c) 2010 由 David Golden 和 Ricardo Signes 所有。

这是一个自由软件;您可以根据与 Perl 5 编程语言系统本身相同的条款重新发布和/或修改它。