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

d'ho.jpg

on your Module page.

Billions of Blue Blistering Barnacles
Blue_Blistering_Barnacles_by_TomPreston.jpg

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.

d'ho2.jpg

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.

7 Comments

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.

[MetaNoIndex]
  package = DBD::Oracle::db
  package = DBD::Oracle::dr
  package = DBD::Oracle::st

Just a minor typo: your PrePAN link points to PAUSE and not http://prepan.org/

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:

It was originally a quick (hack), 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.

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 of dist.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 the no_index element of the META files.

[MetaNoIndex]
  package = DBD::Oracle::db
  package = DBD::Oracle::dr
  package = DBD::Oracle::st
  directory = examples
  directory = hints
  directory = t
  file = some/module.pm
...
no_index:
  directory:
    - examples
    - hints
    - t
  file:
    - some/module.pm
...

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

Leave a comment

About byterock

user-pic Long time Perl guy, a few CPAN mods allot of work on DBD::Oracle and a few YAPC presentations