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'ing)进行。
请注意,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
环境变量存在,为真且不为 "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 <[email protected]>
Ricardo Signes <[email protected]>
Adam Kennedy <[email protected]>
本软件版权 (c) 2010 由 David Golden、Ricardo Signes、Adam Kennedy 和贡献者所有。
本软件是自由软件;您可以根据与 Perl 5 编程语言系统本身相同的条款重新分发和/或修改它。