# from David Golden # on Sunday 06 September 2009 21:53: >> I would be very sad to see a runtime module requirement just to >> declare some rarely-used meta info. Ditto for requiring a new Perl. > >POD? Hell, no.
Why not? If it's properly specified and pod-renderable, things like the distribution status, author, bugtracker, repository, tags, blahblah, can be human-readable and appear in perldoc while also being machine-extractable. That is, I'm quite happy with Getopt::AsDocumented, and it (suboptimally) reads the caller's own pod at runtime (VS metadata, which is often not needed at compile/run time at all.) I can write the documentation and declaration at the same time. It seems that anything which isn't referenced by use() would ultimately cause less trouble by being some bit of text rather than compile-able code. And whatever is referenced on the installed machine need not be the same file that M::B parses when it builds a dist -- once the info is in META.yml you're done parsing. (Picture say, keeping MYMETA.yml on the installed tree plus a scheme for querying that.) >But, for the sake of argument, let's say some bold, foolish programmer >implements an extended 'package' keyword for Perl, like so [1]: > > package Foo 1.23; > >And, following popular demand, at least based on #corehackers and >#toolchain, he implements a way of marking module release status, like >so: > > package Foo 1.23 stable; Well, what about "author", "tags", "repository", etc? Where the version number is a necessary thing and reduces boilerplate code, the status is an unnecessary thing which adds boilerplate code. The '_' in your VERSION vanishes within the runtime because of the necessary eval(). The status and some way to query it is not a necessary part of the package -- plus all of this is really dist-level stuff and you're opening yourself to multiple conflicting status values per .pm file. >... >Then, and only then, do we figure out if it should be a comment, or >just be set in Build.PL or whatever because we'll have thought through >the issues with other toolchain developers and can probably quickly >agree on a common approach. I think you're going a bit knee-jerk on the maintenance concerns of the trigger mechanism. The author features of M::B don't need to be so set-in-stone because the author has control over which M::B they're running and responsibility for doing what it expects. That's not to say that I want to build something hugely complicated and then rip it out from under everyone on the next version, but the "# ALPHA" parse feature is small and special enough that it shouldn't be a big deal. And as for the rest of the toolchain: if we implemented a pod-parsing META declaration scheme, that would be a M:B feature which M::I could choose to replicate or not. There is no need to hold back M::B just to make it easier for users to switch tools. The produced data should adhere to the META spec, but how the user declares that data is up to their tool. --Eric -- software: a hypothetical exercise which happens to compile. --------------------------------------------------- http://scratchcomputing.com ---------------------------------------------------