Great Mystic Mystery Revealed
Your all excited you spent 3 months of your own special free time working on your first CPAN package.
You spent so many hours on an IRC discussing how it should work your spouse suspects your getting a bit on the side.
You included a test suite of over 500 tests,
You put blood, sweat and tears into the Makefile.PL so it will load on any perl on any platform.
If you see one more comment on prepan from that son of a jerk off byterock you're going to punch in in the throat next time you see him at YAPCE:EU
So you clicked the button on PAUSE and had to endure that wait, while PAUSE does it thing. So you go to bed and sleep soundly knowing that by morning my code will be up on CPAN.
You jump out of bed with the anticipation of a six year old on Christmas morning only
to see this
on your Module page.
These three modules
DBD::Oracle::db
DBD::Oracle::dr
DBD::Oracle::st
are internals used deep inside 'DBD::Oracle' when it is called out to play by DBI? They never can be used directly and I am not going to write a POD for them.
How did thy get there??
How can I fix this??
Is my life over??
Well I will most likely get kicked out of the 'league of mystic programmers' just like the way I was kicked out of the 'Guild of Knot Tyers' for reveling trade secrets but here goes.
Well the fix is a little beyond simple just drop the package name to the next line
From this:
{ package DBD::Oracle::db;
...
}
To this:
{ package
DBD::Oracle::db;
...
}
and Bob's y'er uncle.
One more thing just to make sure some smarty pants maintainer comes by a few years from now, after you have moved on to other things, and decides to fix this spacing 'bug' add this in as well
{ package # hide from PAUSE
DBD::Oracle::db;
...
}
So the next time you do a upload to CPAN with this, your first patch, you get what you want.
Why?
Don't know myself. I had a snoop about the docs on PAUSE and some other places didn't find anything on it. I myself just stumbled across this, poking around other peoples code, long before I did my first upload to PAUSE.
My guess it is just the way it parses the file, using one of those darn fool perl reg-ex I hate so much and doesn't recognize the split line package name as something that is suppose to go in the Modules listing.
Most likely a bug, I mean undocumented feature, of the PAUSE server.
Actually I think that PAUSE only parses the modules if it can't find META.json or META.yml
Since the DBD-Oracle distribution uses Dist::Zilla, it was actually Dist::Zilla which added it.
You could have also added some lines to the dist.ini file which removes those modules from the META files.
Just a minor typo: your PrePAN link points to PAUSE and not http://prepan.org/
Ok I fixed that
Dist::Zilla don't know about it adding it?
This little thing has been around long before Dist::Zilla was a just a gleam in its author's eyes, I have seen it in code going way back to the last century.
Not sure no_index (YML) or MetaNoIndex (INI) will do what you expect as the spec says;
... mapping that describes any files, directories, packages, and namespaces that are private (i.e. implementation artifacts) that are not of interest to searching and indexing tools. ...
In this case the db, dr and st are packages that are inside the Oracle.pm file something must be parsing Oracle.pm?
Thanks for the tip it might work and it is good to know about no_index.
Cheers
It was originally a quick, a limit of the parser used to pull out the package names. But so many people have now relied on it, that it's become a feature that won't be fixed.
As Paul "LeoNerd" Evens stated:
Which is why Dist::Zilla copied that feature to determine what to put in the
provides
section of the META files automatically.The
[MetaNoIndex]
section ofdist.ini
that I gave earlier just tells Dist::Zilla to remove those elements from the META files.Some of the other statements possible in the
[MetaNoIndex]
section add items to theno_index
element of the META files.It is probably better to use the old PAUSE feature (bug) that prevents it from indexing package statements that span lines. This is because some external tools either don't use the META files, or can't because they don't exist when they are processing the modules. ( for example processing already installed modules )
I would also recommend looking at the generated META files, and MANIFEST file before uploading, as a quick sanity check.
Dist::Zilla does not create a 'provides' section in META.yml/META.json. There is a plugin do so, but it is not on by default. [MetaNoIndex] does not adjust the 'provides' metadata, but rather *adds* metadata in the form of the 'no_index' key, which PAUSE reads and uses to adjust its calculated list of what modules will enter the index.
https://metacpan.org/pod/CPAN::Meta::Spec#no_index
https://metacpan.org/pod/Dist::Zilla::Plugin::MetaNoIndex#DESCRIPTION