PODカバレッジを取得する。
そのディレクトリにある lib 以下のモジュールを根こそぎ拾ってきて、PODカバレッジを表示します。そのままだと上手く取得できないモジュールがあったりしたので、ちょっとテクっています。
みんなで使うライブラリなら、平均値で70%以上はとりたい欲しいところです。
#!/usr/bin/perl use strict; use warnings; use FindBin; use File::Spec; use File::Find::Iterator; use Pod::Coverage; my @libs = ( "$FindBin::Bin/lib" ); if ( $ARGV[0] ) { # モジュール一覧を取得する my @modules; foreach (@libs) { my $dir = File::Spec->catdir($_, ''); my $it = File::Find::Iterator->create( 'dir' => [$dir] ); while ( my $file = $it->next ) { next if $file !~ /\.pm$/; my $module = $file; $module =~ s/$dir//g; $module =~ s/^\///g; $module =~ s/\.pm$//g; $module =~ s/\//::/g; push( @modules, $module ); } } # PODカバレッジとその平均値を取得する my $total = 0; foreach (@modules) { eval "use $_"; my $pod = Pod::Coverage->new( package => $_ ); my $value = $pod->coverage || 0.0; $value *= 100; $total += $value; printf( "%s,%.2f\n", $_, $value ); } printf( "AVERAGE,%.2f\n", ( $total / scalar(@modules) ) ); } else { # PERL5LIB を再設定して自分自身を再実行 $ENV{'PERL5LIB'} = join( ':', @libs ); system("$FindBin::Bin/$0 retry"); }
よくはまるのが、Perl の数値は int じゃなくて double なので、my $a = 5; $a / 2; は 2 じゃなくて、2.5 になるんですよね。2 にしたいときは int($a / 2); と書かなければいけません。