NAME
   Module::CPANfile - Parse cpanfile

SYNOPSIS
     use Module::CPANfile;

     my $file = Module::CPANfile->load("cpanfile");
     my $prereqs = $file->prereqs; # CPAN::Meta::Prereqs object

     my @features = $file->features; # CPAN::Meta::Feature objects
     my $merged_prereqs = $file->prereqs_with(@identifiers); # CPAN::Meta::Prereqs

     $file->merge_meta('MYMETA.json');

DESCRIPTION
   Module::CPANfile is a tool to handle cpanfile format to load application
   specific dependencies, not just for CPAN distributions.

METHODS
   load
         $file = Module::CPANfile->load;
         $file = Module::CPANfile->load('cpanfile');

       Load and parse a cpanfile. By default it tries to load "cpanfile" in
       the current directory, unless you pass the path to its argument.

   from_prereqs
         $file = Module::CPANfile->from_prereqs({
           runtime => { requires => { DBI => '1.000' } },
         });

       Creates a new Module::CPANfile object from prereqs hash you can get
       via CPAN::Meta's "prereqs", or CPAN::Meta::Prereqs'
       "as_string_hash".

         # read MYMETA, then feed the prereqs to create Module::CPANfile
         my $meta = CPAN::Meta->load_file('MYMETA.json');
         my $file = Module::CPANfile->from_prereqs($meta->prereqs);

         # load cpanfile, then recreate it with round-trip
         my $file = Module::CPANfile->load('cpanfile');
         $file = Module::CPANfile->from_prereqs($file->prereq_specs);
                                           # or $file->prereqs->as_string_hash

   prereqs
       Returns CPAN::Meta::Prereqs object out of the parsed cpanfile.

   prereq_specs
       Returns a hash reference that should be passed to
       "CPAN::Meta::Prereqs->new".

   features
       Returns a list of features available in the cpanfile as
       CPAN::Meta::Feature.

   prereqs_with(@identifiers)
       Retuens CPAN::Meta::Prereqs object, with merged prereqs for features
       identified with the @identifiers.

   to_string($include_empty)
         $file->to_string;
         $file->to_string(1);

       Returns a canonical string (code) representation for cpanfile.
       Useful if you want to convert CPAN::Meta::Prereqs to a new cpanfile.

         # read MYMETA's prereqs and print cpanfile representation of it
         my $meta = CPAN::Meta->load_file('MYMETA.json');
         my $file = Module::CPANfile->from_prereqs($meta->prereqs);
         print $file->to_sring;

       By default, it omits the phase where there're no modules registered.
       If you pass the argument of a true value, it will print them as
       well.

   save
         $file->save('cpanfile');

       Saves the currently loaded prereqs as a new "cpanfile" by calling
       "to_string". Beware this method will overwrite the existing cpanfile
       without any warning or backup. Taking a backup or giving warnings to
       users is a caller's responsibility.

         # Read MYMETA.json and creates a new cpanfile
         my $meta = CPAN::Meta->load_file('MYMETA.json');
         my $file = Module::CPANfile->from_prereqs($meta->prereqs);
         $file->save('cpanfile');

   merge_meta
         $file->merge_meta('META.yml');
         $file->merge_meta('MYMETA.json', '2.0');

       Merge the effective prereqs with Meta speicifcation loaded from the
       given META file, using CPAN::Meta. You can specify the META spec
       version in the second argument, which defaults to 1.4 in case the
       given file is YAML, and 2 if it is JSON.

AUTHOR
   Tatsuhiko Miyagawa

SEE ALSO
   cpanfile, CPAN::Meta, CPAN::Meta::Spec