Distribution::Metadata というのを書いてみた

Distribution::Metadata というのを書いてみた。

これは local にある Module::Name からそれの属する distribution を特定し、

  • main module
  • .packlist ファイル
  • .meta ディレクトリ
  • install.json ファイル
  • MYMETA.json ファイル

を取得するものである。

例えば LWP::UserAgent に対して以下のようなことができる。

use Distribution::Metadata;
my $info = Distribution::Metadata->new_from_module("LWP::UserAgent");
print $info->meta_directory, "\n";
print $_, "\n" for @{ $info->files }
__END__
/Users/skaji/env/plenv/versions/5.20.1/lib/perl5/site_perl/5.20.1/darwin-2level/.meta/libwww-perl-6.08
/Users/skaji/env/plenv/versions/5.20.1/bin/lwp-download
...
/Users/skaji/env/plenv/versions/5.20.1/lib/perl5/site_perl/5.20.1/LWP.pm
/Users/skaji/env/plenv/versions/5.20.1/lib/perl5/site_perl/5.20.1/LWP/Authen/Basic.pm
...

この機能はすでに cpanm などが持ち合わせているが、cpanm をライブラリとして使うべきでないと miyagawa さんに指摘していただいたので別モジュールとしてまとめてみた。

TODO

  • 同じ機能の cpan module って既にある?
  • cpanm 以外の cpan クライアントでインストールした distribution もこのモジュールで特定できるか調べるべき。
  • windows でどう動くか確認すべき。
  • 何のインターフェイスを提供すべきかよくわからない。meta ファイルの path だけ提供できればあとは使う人が適当にやってくれそうである。
  • cpan にあげたい!