Getopt::Chain - Command-line processing like svn and git


NAME

Getopt::Chain - Command-line processing like svn and git


VERSION

Version 0.013


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 the Getopt::Long manpage is fair game.

This is a new version of Getopt::Chain that uses the Path::Dispatcher manpage

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 the Path::Dispatcher manpage version is still available at the Getopt::Chain::v005 manpage


SEE ALSO

the Getopt::Long manpage

the App::Cmd manpage

the MooseX::App::Cmd manpage


ACKNOWLEDGEMENTS

Sartak for the Path::Dispatcher manpage

obra for inspiration on the CLI (via Prophet & Sd: http://syncwith.us/)


AUTHOR

Robert Krimen, <rkrimen at cpan.org>


SOURCE

You can contribute or fork this project via GitHub:

http://github.com/robertkrimen/Getopt-Chain/tree/master

    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 http://rt.cpan.org/NoAuth/ReportBug.html. 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:


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.

 Getopt::Chain - Command-line processing like svn and git