# The following was supposedly scribed by # Johan Vromans # on Thursday 16 June 2005 02:21 am:
>[Quoting Eric Wilhelm, on June 15 2005, 16:58, in "RFC: > Getopt::Modern"] >As the author and maintainer of Getopt::Long I would be very >interested to know what exactly your problems are. I would love for Getopt::Long to be able to behave according to this design, but I don't believe that it's feasible (unless it gets done with BEGIN...require($one_or_the_other). In other words, I set out to redesign both the architecture and the specification. If you're interested in refactoring Getopt::Long, I would be happy to help. "What design?" -> (roughly) trunk/data/notes/why_rebuild_getopt-long.txt >Some points from your slides: > > G::L is actively maintained, which I think is more important. And I commend you for it. I do often try to contact the author before starting such patch/rewrite work and usually don't get an answer. In this case, the rewrite was bound to be an independent exercise even if the end result is ultimately a patch (which it most-likely can't be.) >* 15 years old > What do you mean by that? Perl is 18 years old. C is even older. <re-arranging slightly> >* too flexible > Interesting point. I think G::L follows Perl in TIMTOWTDI. > Most flexibility has been added on user request. These two things go together to yield the third here. Sorry if that wasn't clear. 15 years * n requests/year = 15*n degrees of flexibility = unpredictable >* lacks predictable behaviour > I fail to see your point here. Options are handled from left to > right, which makes perfect sense. To the computer, not the user. Please see below. >* wants to deal with an API > This is provided by the OO API of G::L. > Besides, a single function is also an API. True, but Getoptions() currently contains all of the "expertness" of G::L, which means that other modules cannot learn anything about the options (such as when Getopt::Helpful would like to know if these are simple/float/list/hash, etc options without re-implementing G::L's parsing.) If you tear it apart and put it back together in pieces, it would have the API of which I speak. >* not super-configurable > Wow! Ain't this begging for a simple 2-line wrapper module around > G:L instead of re-inventing the wheel? No. If it involves typing @main::ARGV, something is wrong. >* Arguments in bundles never looked right anyway > I think this is where the personal / religious feelings kick in. Could be. Is this something that can/should be resolved with yet-another-option? >* users do not (and should not have to) understand the programmer's > problems > I fail to see your point. Can you elaborate? Please see the 'data/notes/why_order_matters.txt' in the repository. >* multi-pass support > I think this is possibly the only real improvement to G::L. And, (from my reading of G::L) one that requires a fundamental restructuring of the code. >Personally, I doubt wheter this validates yet another Getopt:: module >(unless you have fun writing it, which is important as well!) I would love to just make this be Getopt::Long, but I rather doubt that it would be possible (or maybe even desirable) for it to be reverse-compatible with 15 years worth of code (except in the (we're-really-just-faking-it) case of the aforementioned BEGIN hack.) --Eric -- Peer's Law: The solution to the problem changes the problem. --------------------------------------------- http://scratchcomputing.com ---------------------------------------------