Distribution::Metadata - gather distribution metadata in local
use Distribution::Metadata;
my $info = Distribution::Metadata->new_from_module("LWP::UserAgent");
print $info->name; # libwww-perl
print $info->version; # 6.13
print $info->distvname; # libwww-perl-6.13
print $info->author; # ETHER
print $info->pathname; # E/ET/ETHER/libwww-perl-6.13.tar.gz
print $info->main_module; # LWP
print $info->main_module_version; # 6.13
print $info->main_module_file; # path of LWP.pm
print $info->packlist; # path of .packlist
print $info->meta_directory; # path of .meta directory
print $info->install_json; # path of install.json
print $info->mymeta_json; # path of MYMETA.json
my $files = $info->files; # files which are listed in .packlist
my $install_json_hash = $info->install_json_hash;
my $mymeta_json_hash = $info->mymeta_json_hash;
(CAUTION: This module is still in development phase. API will change without notice.)
Sometimes we want to know: Where this module comes from? Which distribution does this module belong to?
Since cpanm 1.5000 (released 2011.10.13), it installs not only modules but also their meta data. So we can answer that questions!
Distribution::Metadata gathers distribution metadata in local. That is, this module tries to gather
- main module name, version, file
.packlist
file.meta
directoryinstall.json
fileMYMETA.json
file
Please note that as mentioned above, this module deeply depends on cpanm behavior. If you install cpan modules by hands or some cpan clients other than cpanm, this module won't work.
Let me explain how $class->new_from_module($module, inc => $inc)
works.
-
Get
$module_file
byModule::Metadata->new_from_module($module, inc => $inc)->filename.
-
Find
$packlist
in which$module_file
is listed. -
From
$packlist
pathname (eg: ...auto/LWP/.packlist), determine$main_module
and main module search directory$lib
. -
Get
$main_module_version
byModule::Metadata->new_from_module($main_module, inc => [$lib, "$lib/$Config{archname}"])->version
-
Find install.json that has "name" eq
$main_module
, and provides$main_module
with version$main_module_version
. -
Get .meta directory and MYMETA.json with install.json.
-
my $info = $class->new_from_module($module, inc => \@dirs, fill_archlib => $bool)
Create Distribution::Metadata instance from module name.
You can append
inc
argument to specify module/packlist/meta search paths. Default is\@INC
.Also you can append
fill_archlib
argument so that archlibs are automatically added toinc
if missing.Please note that, even if the module cannot be found,
new_from_module
returns a Distribution::Metadata instance. However almost all methods returns false for such objects. If you want to know whether the distribution was found or not, try:my $info = $class->new_from_module($module); if ($info->packlist) { # found } else { # not found }
-
my $info = $class->new_from_file($file, inc => \@dirs, fill_archlib => $bool)
Create Distribution::Metadata instance from file path. You can append
inc
andfill_archlib
arguments too.Also
new_from_file
retunes a Distribution::Metadata instance, even if file cannot be found.
Please note that the following methods return false when appropriate modules or files cannot be found.
-
my $name = $info->name (alias: $info->dist)
distribution name (eg:
libwww-perl
) -
my $version = $info->version
distribution version (eg:
6.13
) -
my $distvname = $info->distvname
distribution vname (eg:
libwww-perl-6.13
) -
my $author = $info->author (alias: $info->cpanid)
distribution author (eg:
ETHER
) -
my $pathname = $info->pathname
distribution pathname (eg:
E/ET/ETHER/libwww-perl-6.13.tar.gz
) -
my $file = $info->packlist
.packlist
file path -
my $dir = $info->meta_directory
.meta
directory path -
my $file = $info->install_json
install.json
file path -
my $file = $info->mymeta_json
MYMETA.json
file path -
my $main_module = $info->main_module
main module name
-
my $version = $info->main_module_version
main module version
-
my $file = $info->main_module_file
main module file path
-
my $files = $info->files
file paths which is listed in
.packlist
file, note that paths are acutuallyCwd::abs_path()
-ed -
my $hash = $info->install_json_hash
a hash reference for
install.json
my $info = Distribution::Metadata->new_from_module("LWP::UserAgent"); my $install = $info->install_json_hash; $install->{version}; # 6.13 $install->{dist}; # libwww-perl-6.13 $install->{provides}; # a hash reference of providing modules ...
-
my $hash = $info->mymeta_json_hash
a hash reference for
MYMETA.json
my $info = Distribution::Metadata->new_from_module("LWP::UserAgent"); my $meta = $info->mymeta_hash; $meta->{version}; # 6.13 $meta->{abstract}; # The World-Wide Web library for Perl $meta->{prereqs}; # prereq hash ...
Copyright (C) 2015 Shoichi Kaji skaji@cpan.org
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.