perl - getting "defined" modules from a CPAN dist file? -


given cpan dist file (e.g. acme-chef-1.01.tar.gz), algorithm determine module-versions "defined" (or present) in dist file?

for instance, in 02packages.details.txt file, there 4 lines correspond dist file:

acme::chef                         1.01  s/sm/smueller/acme-chef-1.01.tar.gz acme::chef::container              1.00  s/sm/smueller/acme-chef-1.01.tar.gz acme::chef::ingredient             1.00  s/sm/smueller/acme-chef-1.01.tar.gz acme::chef::recipe                 1.00  s/sm/smueller/acme-chef-1.01.tar.gz 

i want know how lines generated.

is procedure like:

  1. find of .pm files in dist file
  2. load each of .pm files , print out ${ "${pkg}::version"} $pkg package name corresponding .pm file name (i.e. if .pm file name foo/bar.pm $pkg foo::bar.)

is there code indexing procedure?

do have load module in order determine version is?

the actual code pause on github here. subroutines parse package , version declarations in lib/pause/pmfile.pm (packages_per_pmfile , parse_version). authoritative far happens make cpan work, it's not code you'd ever want use — pause 20 years old , after recent cleanup it's still pretty gross.

instead, @ module::metadata. give file, , provides pretty simple interface discover names of packages inside of file , versions might be.

it's simple as:

my $mm = module::metadata->new_from_file("my/module.pm"); $package ($mm->packages_inside) {     print "$package: ", $mm->version($package), "\n"; } 

and indeed "one-liner" works:

find acme-chef-1.01 -name \*.pm \ | perl -mmodule::metadata -ln \ -e 'my $mm = module::metadata->new_from_file($_); ' \ -e 'print "$_: ", $mm->version($_) $mm->packages_inside' \ | sort 

and outputs:

acme::chef: 1.01 acme::chef::container: 1.00 acme::chef::ingredient: 1.00 acme::chef::recipe: 1.00 

Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -