NAME
App::Cmd - write command line apps with less suffering
VERSION
version 0.009
SYNOPSIS
in yourcmd:
use YourApp::Cmd;
Your::Cmd->run;
in YourApp/Cmd.pm:
package YourApp::Cmd;
use base qw(App::Cmd);
1;
in YourApp/Cmd/Command/blort.pm:
package YourApp::Cmd::Command::blort;
use base qw(App::Cmd::Command);
use strict; use warnings;
sub opt_spec {
return (
[ "blortex|X", "use the blortex algorithm" ],
[ "recheck|r", "recheck all results" ],
);
}
sub validate_args {
my ($self, $opt, $args) = @_;
# no args allowed but options!
$self->usage_error("No args allowed") if @$args;
}
sub run {
my ($self, $opt, $args) = @_;
my $result = $opt->{blortex} ? blortex() : blort();
recheck($result) if $opt->{recheck};
print $result;
}
and, finally, at the command line:
knight!rjbs$ yourcmd blort --recheck
All blorts successful.
DESCRIPTION
App::Cmd is intended to make it easy to write complex command-line applications without having to think about most of the annoying things usually involved.
For information on how to start using App::Cmd, see App::Cmd::Tutorial.
METHODS
new
my $cmd = App::Cmd->new(\%arg);
This method returns a new App::Cmd object. During initialization, command plugins will be loaded.
Valid arguments are:
no_commands_plugin - if true, the command list plugin is not added
no_help_plugin - if true, the help plugin is not added
plugin_search_path - The path to search for commands in. Defaults to
results of plugin_search_path method
If no_commands_plugin
is not given, App::Cmd::Command::commands will be required, and it will be registered to handle all of its command names not handled by other plugins.
If no_help_plugin
is not given, App::Cmd::Command::help will be required, and it will be registered to handle all of its command names not handled by other plugins. Note: "help" is the default command, so if you do not load the default help plugin, you should provide our own or override the default_command
method.
run
$cmd->run;
This method runs the application. If called the class, it will instantiate a new App::Cmd object to run.
It determines the requested command (generally by consuming the first command-line argument), finds the plugin to handle that command, parses the remaining arguments according to that plugin's rules, and runs the plugin.
prepare_command
my ($cmd, $opt, @args) = $app->prepare_command(@ARGV);
This method will load the plugin for the requested command, use its options to parse the command line arguments, and eventually return everything necessary to actually execute the command.
default_command
This method returns the name of the command to run if none is given on the command line. The default default is "help"
execute_command
$app->execute_command($cmd, \%opt, @args);
This method will invoke validate_args
and then run
on $cmd
.
plugin_search_path
This method returns the plugin_search_path as set. The default implementation, if called on "YourApp::Cmd" will return "YourApp::Cmd::Command"
This is a method because it's fun to override it with, for example:
use constant plugin_search_path => __PACKAGE__;
global_options
if ($cmd->app->global_options->{verbose}) { ... }
This method returns the running application's global options as a hashref. If there are no options specified, an empty hashref is returend.
set_global_options
$app->set_global_options(\%opt);
This method sets the global options.
command_names
my @names = $cmd->command_names;
This returns the commands names which the App::Cmd object will handle.
command_plugins
my @plugins = $cmd->command_plugins;
This method returns the package names of the plugins that implement the App::Cmd object's commands.
plugin_for
my $plugin = $cmd->plugin_for($command);
This method returns the plugin (module) for the given command. If no plugin implements the command, it returns false.
get_command
my ($command_name, $opt, @args) = $app->get_command(@args);
Process arguments and into a command name and (optional) global options.
usage
print $self->app->usage->text;
Returns the usage object for the global options.
usage_desc
The top level usage line. Looks something like
"yourapp [options] <command>"
global_opt_spec
Returns an empty list. Can be overridden for pre-dispatch option processing. This is useful for flags like --verbose.
usage_error
$self->usage_error("Your mother!");
Used to die with nice usage output, during validate_args
.
TODO
Lots of stuff! This list isn't close to complete yet, I'm still adding to it.
improve the tutorial
publish and bring in Log::Speak (simple quiet/verbose output)
publish and use our internal enhanced describe_options
publish and use our improved simple input routines
publish and use our remaining little CLI tools
make it simple to write a command with no subcommands
AUTHOR AND COPYRIGHT
Copyright 2005-2006, (code (simply)). All rights reserved; App::Cmd and bundled code are free software, released under the same terms as perl itself.
App:Cmd was originally written as Rubric::CLI by Ricardo SIGNES in 2005. It was refactored extensively by Ricardo SIGNES and John Cappiello and released as App::Cmd in 2006. Yuval Kogman performed significant refactoring and other improvements on the code.