Parse::CPAN::Meta - 分析 META.yml 和 META.json CPAN 元數據檔案
版本 2.150010
#############################################
# In your file
---
name: My-Distribution
version: 1.23
resources:
homepage: "http://example.com/dist/My-Distribution"
#############################################
# In your program
use Parse::CPAN::Meta;
my $distmeta = Parse::CPAN::Meta->load_file('META.yml');
# Reading properties
my $name = $distmeta->{name};
my $version = $distmeta->{version};
my $homepage = $distmeta->{resources}{homepage};
Parse::CPAN::Meta 是 META.json 和 META.yml 檔案的剖析器,使用 JSON::PP 和/或 CPAN::Meta::YAML。
Parse::CPAN::Meta 提供三個方法:load_file
、load_json_string
和 load_yaml_string
。這些方法會讀取和反序列化 CPAN 元數據檔案,並在下方詳細說明。
Parse::CPAN::Meta 提供僅有兩個函式的舊版 API,根據同名的 YAML 函式。只要有可能,就會使用相同的呼叫語意。這些函式只能用於 YAML 來源。
所有錯誤回報都以例外處理(die)完成。
請注意,META 檔案預期僅為 UTF-8 編碼。轉換字串資料時,必須先從 UTF-8 解碼。
my $metadata_structure = Parse::CPAN::Meta->load_file('META.json');
my $metadata_structure = Parse::CPAN::Meta->load_file('META.yml');
此方法會讀取指定檔案並將其反序列化成資料結構,根據檔名判斷應為 JSON 或 YAML。檔案將使用「:utf8」IO 層讀取。
my $metadata_structure = Parse::CPAN::Meta->load_yaml_string($yaml_string);
此方法反序列化指定的 YAML 字串,並傳回其第一個文件。(CPAN 元資料檔案通常只有一個文件。)如果來源以 UTF-8 編碼,則必須在呼叫 load_yaml_string
之前先解碼字串。
my $metadata_structure = Parse::CPAN::Meta->load_json_string($json_string);
此方法反序列化指定的 JSON 字串並傳回結果。如果來源以 UTF-8 編碼,則必須在呼叫 load_json_string
之前先解碼字串。
my $metadata_structure = Parse::CPAN::Meta->load_string($some_string);
如果您不知道字串包含 YAML 或 JSON 資料,此方法將使用一些啟發法並猜測。如果無法判斷,則假設為 YAML。
my $backend = Parse::CPAN::Meta->yaml_backend;
傳回 YAML 序列化器的模組名稱。有關詳細資訊,請參閱 "環境"。
my $backend = Parse::CPAN::Meta->json_backend;
傳回 JSON 序列化器的模組名稱。如果設定了 CPAN_META_JSON_BACKEND
,則會傳回設定的內容。如果沒有,則會傳回 JSON::PP 或 JSON。如果設定了 PERL_JSON_BACKEND
,則會傳回 JSON,因為進一步的委派是由 JSON 模組處理。有關詳細資訊,請參閱 "環境"。
my $decoder = Parse::CPAN::Meta->json_decoder;
傳回 JSON 解碼器的模組名稱。與 "json_backend" 不同,這不一定是完整的 JSON 風格模組,而只會提供 decode_json
子程式。如果設定了 CPAN_META_JSON_DECODER
,則會傳回設定的內容。如果沒有,則會傳回選為 "json_backend" 的內容。有關更多注意事項,請參閱 "環境"。
為了維護清晰度,預設不會匯出任何函式。這些函式僅供向後相容性使用,最好避免使用,而改用 load_file
。
my @yaml = Parse::CPAN::Meta::Load( $string );
將包含有效 YAML 串流的字串剖析成 Perl 資料結構清單。
my @yaml = Parse::CPAN::Meta::LoadFile( 'META.yml' );
從檔案讀取 YAML 串流,而非字串。
預設情況下,JSON::PP 會用於反序列化 JSON 資料。如果 CPAN_META_JSON_DECODER
環境變數存在,則預期這是可載入模組的名稱,提供 decode_json
子常式,然後將用於反序列化。僅依賴於所述子常式的存在,允許最大的相容性,因為此 API 由 JSON::PP、JSON::XS、Cpanel::JSON::XS、JSON::MaybeXS、JSON::Tiny 和 Mojo::JSON 提供。
預設情況下,JSON::PP 會用於反序列化 JSON 資料。如果 CPAN_META_JSON_BACKEND
環境變數存在,則預期這是可載入模組的名稱,提供 JSON API,因為下游程式碼預期能夠對此類別呼叫 new
。因此,雖然 JSON::PP、JSON::XS、Cpanel::JSON::XS 和 JSON::MaybeXS 可用於此,但要使用 Mojo::JSON 或 JSON::Tiny 進行解碼,需要設定 "CPAN_META_JSON_DECODER"。
如果 CPAN_META_JSON_BACKEND
環境變數不存在,且如果 PERL_JSON_BACKEND
環境變數存在、為 true 且不為 "JSON::PP",則會載入 JSON 模組 (版本 2.5 或更高版本) 並用於詮釋 PERL_JSON_BACKEND
。如果未安裝 JSON 或版本太舊,將會擲回例外。請注意,在撰寫本文時,唯一有用的值是 1,它會告訴 JSON 猜測,或 JSON::XS - 如果你想使用較新的 JSON 模組,請參閱 "CPAN_META_JSON_BACKEND"。
預設情況下,CPAN::Meta::YAML 會用於反序列化 YAML 資料。如果定義了 PERL_YAML_BACKEND
環境變數,則將其詮釋為用於反序列化的模組。給定的模組必須已安裝,必須正確載入,並且必須實作 Load()
函式,否則將會擲回例外。
David Golden <dagolden@cpan.org>
Ricardo Signes <rjbs@cpan.org>
Adam Kennedy <adamk@cpan.org>
本軟體的著作權 (c) 2010 由 David Golden、Ricardo Signes、Adam Kennedy 和協力廠商所有。
這是自由軟體;你可以根據 Perl 5 程式語言系統本身的相同條款重新散布或修改它。