Module::CPANfile - Parse cpanfile
  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');
Module::CPANfile is a tool to handle cpanfile format to load
    application specific dependencies, not just for CPAN distributions.
  - 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),
    effective_prereqs(\@identifiers)
 
  - Returns 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_string;
    
    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 specification 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.
   
  - options_for_module
 
  - 
    
  my $options = $file->options_for_module($module);
    
    Returns the extra options specified for a given module as a
        hash reference. Returns "undef" when
        the given module is not specified in the
        "cpanfile".
    For example,
    
      # cpanfile
  requires 'Plack', '1.000',
    dist => "MIYAGAWA/Plack-1.000.tar.gz";
  # ...
  my $file = Module::CPANfile->load;
  my $options = $file->options_for_module('Plack');
  # => { dist => "MIYAGAWA/Plack-1.000.tar.gz" }
    
   
cpanfile, CPAN::Meta, CPAN::Meta::Spec