.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "inc::CPAN::Meta::Converter 3" .TH inc::CPAN::Meta::Converter 3 "2023-08-30" "perl v5.16.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" CPAN::Meta::Converter \- Convert CPAN distribution metadata structures .SH "VERSION" .IX Header "VERSION" version 2.143240 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& my $struct = decode_json_file(\*(AqMETA.json\*(Aq); \& \& my $cmc = CPAN::Meta::Converter\->new( $struct ); \& \& my $new_struct = $cmc\->convert( version => "2" ); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module converts \s-1CPAN\s0 Meta structures from one form to another. The primary use is to convert older structures to the most modern version of the specification, but other transformations may be implemented in the future as needed. (E.g. stripping all custom fields or stripping all optional fields.) .SH "METHODS" .IX Header "METHODS" .SS "new" .IX Subsection "new" .Vb 1 \& my $cmc = CPAN::Meta::Converter\->new( $struct ); .Ve .PP The constructor should be passed a valid metadata structure but invalid structures are accepted. If no meta-spec version is provided, version 1.0 will be assumed. .PP Optionally, you can provide a \f(CW\*(C`default_version\*(C'\fR argument after \f(CW$struct\fR: .PP .Vb 1 \& my $cmc = CPAN::Meta::Converter\->new( $struct, default_version => "1.4" ); .Ve .PP This is only needed when converting a metadata fragment that does not include a \&\f(CW\*(C`meta\-spec\*(C'\fR field. .SS "convert" .IX Subsection "convert" .Vb 1 \& my $new_struct = $cmc\->convert( version => "2" ); .Ve .PP Returns a new hash reference with the metadata converted to a different form. \&\f(CW\*(C`convert\*(C'\fR will die if any conversion/standardization still results in an invalid structure. .PP Valid parameters include: .IP "\(bu" 4 \&\f(CW\*(C`version\*(C'\fR \*(-- Indicates the desired specification version (e.g. \*(L"1.0\*(R", \*(L"1.1\*(R" ... \*(L"1.4\*(R", \*(L"2\*(R"). Defaults to the latest version of the \s-1CPAN\s0 Meta Spec. .PP Conversion proceeds through each version in turn. For example, a version 1.2 structure might be converted to 1.3 then 1.4 then finally to version 2. The conversion process attempts to clean-up simple errors and standardize data. For example, if \f(CW\*(C`author\*(C'\fR is given as a scalar, it will converted to an array reference containing the item. (Converting a structure to its own version will also clean-up and standardize.) .PP When data are cleaned and standardized, missing or invalid fields will be replaced with sensible defaults when possible. This may be lossy or imprecise. For example, some badly structured \s-1META\s0.yml files on \s-1CPAN\s0 have prerequisite modules listed as both keys and values: .PP .Vb 1 \& requires => { \*(AqFoo::Bar\*(Aq => \*(AqBam::Baz\*(Aq } .Ve .PP These would be split and each converted to a prerequisite with a minimum version of zero. .PP When some mandatory fields are missing or invalid, the conversion will attempt to provide a sensible default or will fill them with a value of 'unknown'. For example a missing or unrecognized \f(CW\*(C`license\*(C'\fR field will result in a \f(CW\*(C`license\*(C'\fR field of 'unknown'. Fields that may get an 'unknown' include: .IP "\(bu" 4 abstract .IP "\(bu" 4 author .IP "\(bu" 4 license .SS "upgrade_fragment" .IX Subsection "upgrade_fragment" .Vb 1 \& my $new_struct = $cmc\->upgrade_fragment; .Ve .PP Returns a new hash reference with the metadata converted to the latest version of the \s-1CPAN\s0 Meta Spec. No validation is done on the result \*(-- you must validate after merging fragments into a complete metadata document. .SH "BUGS" .IX Header "BUGS" Please report any bugs or feature using the \s-1CPAN\s0 Request Tracker. Bugs can be submitted through the web interface at .PP When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. .SH "AUTHORS" .IX Header "AUTHORS" .IP "\(bu" 4 David Golden .IP "\(bu" 4 Ricardo Signes .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2010 by David Golden and Ricardo Signes. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.