目錄

名稱

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::MetaMETA.jsonMETA.yml 檔案的剖析器,使用 JSON::PP 和/或 CPAN::Meta::YAML

Parse::CPAN::Meta 提供三個方法:load_fileload_json_stringload_yaml_string。這些方法會讀取和反序列化 CPAN 元數據檔案,並在下方詳細說明。

Parse::CPAN::Meta 提供僅有兩個函式的舊版 API,根據同名的 YAML 函式。只要有可能,就會使用相同的呼叫語意。這些函式只能用於 YAML 來源。

所有錯誤回報都以例外處理(die)完成。

請注意,META 檔案預期僅為 UTF-8 編碼。轉換字串資料時,必須先從 UTF-8 解碼。

方法

load_file

my $metadata_structure = Parse::CPAN::Meta->load_file('META.json');

my $metadata_structure = Parse::CPAN::Meta->load_file('META.yml');

此方法會讀取指定檔案並將其反序列化成資料結構,根據檔名判斷應為 JSON 或 YAML。檔案將使用「:utf8」IO 層讀取。

load_yaml_string

my $metadata_structure = Parse::CPAN::Meta->load_yaml_string($yaml_string);

此方法反序列化指定的 YAML 字串,並傳回其第一個文件。(CPAN 元資料檔案通常只有一個文件。)如果來源以 UTF-8 編碼,則必須在呼叫 load_yaml_string 之前先解碼字串。

load_json_string

my $metadata_structure = Parse::CPAN::Meta->load_json_string($json_string);

此方法反序列化指定的 JSON 字串並傳回結果。如果來源以 UTF-8 編碼,則必須在呼叫 load_json_string 之前先解碼字串。

load_string

my $metadata_structure = Parse::CPAN::Meta->load_string($some_string);

如果您不知道字串包含 YAML 或 JSON 資料,此方法將使用一些啟發法並猜測。如果無法判斷,則假設為 YAML。

yaml_backend

my $backend = Parse::CPAN::Meta->yaml_backend;

傳回 YAML 序列化器的模組名稱。有關詳細資訊,請參閱 "環境"

json_backend

my $backend = Parse::CPAN::Meta->json_backend;

傳回 JSON 序列化器的模組名稱。如果設定了 CPAN_META_JSON_BACKEND,則會傳回設定的內容。如果沒有,則會傳回 JSON::PPJSON。如果設定了 PERL_JSON_BACKEND,則會傳回 JSON,因為進一步的委派是由 JSON 模組處理。有關詳細資訊,請參閱 "環境"

json_decoder

my $decoder = Parse::CPAN::Meta->json_decoder;

傳回 JSON 解碼器的模組名稱。與 "json_backend" 不同,這不一定是完整的 JSON 風格模組,而只會提供 decode_json 子程式。如果設定了 CPAN_META_JSON_DECODER,則會傳回設定的內容。如果沒有,則會傳回選為 "json_backend" 的內容。有關更多注意事項,請參閱 "環境"

函式

為了維護清晰度,預設不會匯出任何函式。這些函式僅供向後相容性使用,最好避免使用,而改用 load_file

Load

my @yaml = Parse::CPAN::Meta::Load( $string );

將包含有效 YAML 串流的字串剖析成 Perl 資料結構清單。

LoadFile

my @yaml = Parse::CPAN::Meta::LoadFile( 'META.yml' );

從檔案讀取 YAML 串流,而非字串。

環境

CPAN_META_JSON_DECODER

預設情況下,JSON::PP 會用於反序列化 JSON 資料。如果 CPAN_META_JSON_DECODER 環境變數存在,則預期這是可載入模組的名稱,提供 decode_json 子常式,然後將用於反序列化。僅依賴於所述子常式的存在,允許最大的相容性,因為此 API 由 JSON::PPJSON::XSCpanel::JSON::XSJSON::MaybeXSJSON::TinyMojo::JSON 提供。

CPAN_META_JSON_BACKEND

預設情況下,JSON::PP 會用於反序列化 JSON 資料。如果 CPAN_META_JSON_BACKEND 環境變數存在,則預期這是可載入模組的名稱,提供 JSON API,因為下游程式碼預期能夠對此類別呼叫 new。因此,雖然 JSON::PPJSON::XSCpanel::JSON::XSJSON::MaybeXS 可用於此,但要使用 Mojo::JSONJSON::Tiny 進行解碼,需要設定 "CPAN_META_JSON_DECODER"

PERL_JSON_BACKEND

如果 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"

PERL_YAML_BACKEND

預設情況下,CPAN::Meta::YAML 會用於反序列化 YAML 資料。如果定義了 PERL_YAML_BACKEND 環境變數,則將其詮釋為用於反序列化的模組。給定的模組必須已安裝,必須正確載入,並且必須實作 Load() 函式,否則將會擲回例外。

作者

著作權和授權

本軟體的著作權 (c) 2010 由 David Golden、Ricardo Signes、Adam Kennedy 和協力廠商所有。

這是自由軟體;你可以根據 Perl 5 程式語言系統本身的相同條款重新散布或修改它。