内容

名称

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.jsonMETA.yml 文件的解析器,它使用 JSON::PP 和/或 CPAN::Meta::YAML

Parse::CPAN::Meta 提供三种方法:load_fileload_json_stringload_yaml_string。这些方法将读取和反序列化 CPAN 元数据文件,并在下面详细描述。

Parse::CPAN::Meta 提供了一个仅包含两个函数的遗留 API,基于同名的 YAML 函数。在可能的情况下,使用相同的调用语义。这些函数只能用于 YAML 源。

所有错误报告都通过异常(die'ing)进行。

请注意,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 环境变量存在,为真且不为 "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 编程语言系统本身相同的条款重新分发和/或修改它。