NAME
    Getopt::Chain - Command-line processing like svn and git
VERSION
    Version 0.015
SYNPOSIS
        package My::Command;
        use Getopt::Chain::Declare;
        start [qw/ verbose|v /]; # These are "global"
                                 # my-command --verbose initialize ...
        # my-command ? initialize ... --> my-command help initialize ...
        rewrite qr/^\?(.*)/ => sub { "help ".($1||'') };
        # NOTE: Rewriting applies to the command sequence, NOT options
        # my-command about ... --> my-command help about
        rewrite [ ['about', 'copying'] ] => sub { "help $1" };
        # my-command initialize --dir=...
        on initialize => [qw/ dir|d=s /], sub {
            my $context = shift;
            my $dir = $context->option( 'dir' )
            # Do initialize stuff with $dir
        };
        # my-command help
        on help => undef, sub {
            my $context = shift;
            # Do help stuff ...
            # First argument is undef because help
            # doesn't take any options
        };
        under help => sub {
            # my-command help create
            # my-command help initialize
            on [ [ qw/create initialize/ ] ] => undef, sub {
                my $context = shift;
                # Do help for create/initialize
                # Both: "help create" and "help initialize" go here
            };
            # my-command help about
            on 'about' => undef, sub {
                my $context = shift;
                # Help for about...
            };
            # my-command help copying
            on 'copying' => undef, sub {
                my $context = shift;
                # Help for copying...
            };
            # my-command help ...
            on qr/^(\S+)$/ => undef, sub {
               my $context = shift;
               my $topic = $1;
               # Catch-all for anything not fitting into the above...
               warn "I don't know about \"$topic\"\n"
            };
        };
        # ... elsewhere ...
        My::Command->new->run( [ @arguments ] )
        My::Command->new->run # Just run with @ARGV
DESCRIPTION
    Getopt::Chain can be used to provide svn(1)- and git(1)-style option and
    command processing. Any option specification covered by Getopt::Long is
    fair game.
    This is a new version of Getopt::Chain that uses Path::Dispatcher
    CAVEAT 1: This is pretty beta, so the sugar/interface above WILL be
    tweaked
    CAVEAT 2: Unfortunately, Getopt::Long slurps up the entire arguments
    array at once. Usually, this isn't a problem (as Getopt::Chain uses
    pass_through). However, if a subcommand has an option with the same name
    or alias as an option for a parent, then that option won't be available
    for the subcommand. For example:
        ./script --verbose --revision 36 edit --revision 48 --file xyzzy.c
        # Getopt::Chain will not associate the second --revision with "edit"
    So, for now, try to use distinct option names/aliases :)
    DEBUG: You can get some extra information about what Getopt::Chain is
    doing by setting the environment variable "GOC_TRACE" to 1
LEGACY
    The old-style, non Path::Dispatcher version is still available at
    Getopt::Chain::v005
SEE ALSO
    Getopt::Long
    App::Cmd
    MooseX::App::Cmd
ACKNOWLEDGEMENTS
    Sartak for Path::Dispatcher
    obra for inspiration on the CLI (via Prophet & Sd:
    )
AUTHOR
    Robert Krimen, ""
SOURCE
    You can contribute or fork this project via GitHub:
    
        git clone git://github.com/robertkrimen/Getopt-Chain.git Getopt-Chain
BUGS
    Please report any bugs or feature requests to "bug-Getopt-Chain at
    rt.cpan.org", or through the web interface at
    . I will be
    notified, and then you'll automatically be notified of progress on your
    bug as I make changes.
SUPPORT
    You can find documentation for this module with the perldoc command.
        perldoc Getopt::Chain
    You can also look for information at:
    *   RT: CPAN's request tracker
        
    *   AnnoCPAN: Annotated CPAN documentation
        
    *   CPAN Ratings
        
    *   Search CPAN
        
COPYRIGHT & LICENSE
    Copyright 2008 Robert Krimen, all rights reserved.
    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.