Test::Pod::Coverage is a great module. I use it a lot. Unfortunately, I am constantly getting bit by this module not recognizing "aliased" constant subroutines as something it should ignore.
As an example of the latter, internally my Model::World module does things like this:
use aliased 'Model::World::Word::Adjective';
use aliased 'Model::World::Word::Noun';
use aliased 'Model::World::Thing';
use aliased 'Model::World::Thing::Room';
my $big_room = Room->new( {
adjective => Adjective->new('big'),
size => 10_000
});
my $box = Thing->new( {
name => Noun->new('box'),
location => $big_room,
size => ...
aliased does a great job of cutting down on typing, but Test::Pod::Coverage sees those and chokes. Right now I get around that with something like this:
my $aliased = qr/^[[:upper:]][[:alpha:]]*$/;
my @modules = Test::Pod::Coverage::all_modules();
plan tests => scalar @modules;
foreach my $module (@modules) {
pod_coverage_ok( $module, { trustme => [ $aliased ] } );
}
There's a risk of false positives, but since I don't ordinarily write subroutines which begin with upper case letters, I think I'm pretty safe.
Of course, I don't really force the programmer to write out all of those "aliased" statements. All the programmer really needs to do is this:
use Model::World ':all';
my $big_room = Room->new( {
adjective => Adjective->new('big'),
size => 10_000
...