Parse::PMFile 0.01
遅ればせながらQA Hackathonの成果のひとつとして、Parse::PMFileというモジュールをCPANにアップしました。これは2013年4月時点のPAUSEの中に埋もれているパッケージ/バージョン情報を抽出するコードをほとんどそのまま独立したモジュールとして抜き出したものです。
主目的はCPANTSのバージョン情報抽出精度の向上なので、現状ではPAUSEがやっているようなパッケージの解凍や索引の作成、またパーミッション情報の確認(PAUSEでは不適切なパーミッションを持つディストリビューションは索引に含めないようになっています)などはできないようになっています(パーミッションについてはTODOとして今後なんらかの方法で対応できないか検討する予定です)。また、そもそもがCPANの索引づくりを行うためのものなので、索引に載せないように工夫されたパッケージの情報も取得できません。
使い方は以下の通りです。単に.pmファイルのパッケージ/バージョン情報を取りたいだけならMETA.ymlの情報は渡さなくてもかまいませんが、META.ymlにprovidesフィールドが存在している場合(より厳密にはそのMETA.ymlが過去の壊れていたModule::Buildが生成したものではない、という条件もつきます)、その実際に.pmファイルの中身を精査せず、providesフィールドの情報を返すようになっています。
use strict; use warnings; use Parse::PMFile; use Data::Dumper qw/Dumper/; use YAML::Tiny qw/LoadFile/; # サンプルなので横着していますが、本当はCPAN::Meta::YAMLを使うところです my $metadata = LoadFile('META.yml'); my $parser = Parse::PMFile->new($metadata); my $packages_info = $parser->parse('lib/Foo.pm'); print Dumper $packages_info; # $VAR1 = { # 'Foo' => { # 'parsed' => 1, # 'filemtime' => 1234567890, # 'version' => '0.01', # 'infile' => 'lib/Foo.pm', # 'simile' => 'lib/Foo.pm', # } # };