內容

名稱

CPAN::Meta::Requirements - CPAN dist 的一組版本需求

版本

版本 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 字串」。它會了解 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 字串」。必要時,您可以提供選項的雜湊參考,就像「new」方法一樣。

支援

錯誤 / 功能要求

請透過 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 程式語言系統相同的條款下重新散布或修改它。