############################################# # 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 provides three methods: "load_file", "load_json_string", and "load_yaml_string". These will read and deserialize CPAN metafiles, and are described below in detail.
Parse::CPAN::Meta provides a legacy API of only two functions, based on the YAML functions of the same name. Wherever possible, identical calling semantics are used. These may only be used with YAML sources.
All error reporting is done with exceptions (die'ing).
Note that META files are expected to be in UTF-8 encoding, only. When converted string data, it must first be decoded from UTF-8.
my $metadata_structure = Parse::CPAN::Meta->load_file('META.json'); my $metadata_structure = Parse::CPAN::Meta->load_file('META.yml');
This method will read the named file and deserialize it to a data structure, determining whether it should be JSON or YAML based on the filename. The file will be read using the ``:utf8'' IO layer.
my $metadata_structure = Parse::CPAN::Meta->load_yaml_string($yaml_string);
This method deserializes the given string of YAML and returns the first document in it. (CPAN metadata files should always have only one document.) If the source was UTF-8 encoded, the string must be decoded before calling "load_yaml_string".
my $metadata_structure = Parse::CPAN::Meta->load_json_string($json_string);
This method deserializes the given string of JSON and the result. If the source was UTF-8 encoded, the string must be decoded before calling "load_json_string".
my $metadata_structure = Parse::CPAN::Meta->load_string($some_string);
If you don't know whether a string contains YAML or JSON data, this method will use some heuristics and guess. If it can't tell, it assumes YAML.
my $backend = Parse::CPAN::Meta->yaml_backend;
Returns the module name of the YAML serializer. See ``ENVIRONMENT'' for details.
my $backend = Parse::CPAN::Meta->json_backend;
Returns the module name of the JSON serializer. If "CPAN_META_JSON_BACKEND" is set, this will be whatever that's set to. If not, this will either be JSON::PP or JSON. If "PERL_JSON_BACKEND" is set, this will return JSON as further delegation is handled by the JSON module. See ``ENVIRONMENT'' for details.
my $decoder = Parse::CPAN::Meta->json_decoder;
Returns the module name of the JSON decoder. Unlike ``json_backend'', this is not necessarily a full JSON-style module, but only something that will provide a "decode_json" subroutine. If "CPAN_META_JSON_DECODER" is set, this will be whatever that's set to. If not, this will be whatever has been selected as ``json_backend''. See ``ENVIRONMENT'' for more notes.
my @yaml = Parse::CPAN::Meta::Load( $string );
Parses a string containing a valid YAML stream into a list of Perl data structures.
my @yaml = Parse::CPAN::Meta::LoadFile( 'META.yml' );
Reads the YAML stream from a file instead of a string.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.