NAME Command::Do - The power of the Sun in the palm of your hand VERSION version 0.05 SYNOPSIS in yourcmd: use YourCmd; YourCmd->run; in lib/YourCmd.pm package YourCmd; use Command::Do; field name => { required => 1, alias => 'n', optspec => '=s' }; method run => { input => ['name'], using => sub { exit print "You sure have a nice name, " . shift->name; } }; and, finally, at the command line: $ yourcmd --name "Handsome" You sure have a nice name, Handsome or, ... use one CLI (command-line interface) to rule them all. #!/usr/bin/env perl package Bit; use Command::Do; set { # load child classes (commands) classes => 1 }; fld command => { required => 1, min_length => 2, filters => ['trim', 'strip', sub { $_[0] =~ s/\W/\_/g; $_[0] }] }; mth run => { input => ['command'], using => sub { my ($self) = @_; my $class = $self->class($self->command); if ($class) { $class->run # run child command class } } }; bld sub { my ($self) = @_; $self->command(shift @ARGV); }; package main; Bit->new->run 1; DESCRIPTION Command::Do is an extremely easy method for creating, validating, executing, and organizing command-line applications. Command::Do inherits most of its functionality from the ever-awesome Validation::Class and Getopt::Long. Command::Do is both simple, effective and anti-complicated. It is very unassumming and flexible. It does not impose a particular application configuration and its dependencies are trivial. It doesn't provide a mechanism for rendering help and/or command and options screens. The trend I'd recommend for that purpose is to simply display the command's POD, if that doesn't suit you, building your own help text rendering function is trivial. Command::Do is very minimalistic and tries to remain unassuming, each class field (see Validation::Class) that is to be used as a command line option must have an "optspec" directive defined. The optspec directive should be a valid Getopt::Long option specification minus a name and aliases which are deduced from the field name and alias directive. package ...; use Command::Do; field verbose => { optspec => '', # sets flag, same as '!' alias => 'v' }; # this is the equivalent to the following Getopt::Long statement # GetOptions('verbose|v!' => \$variable); Furthermore, in addition to being a class that represents a command that does stuff, Command::Do is: com-man-do: A soldier specially trained to carry out raids. In English, the term commando means a specific kind of individual soldier or military unit. In contemporary usage, commando usually means elite light infantry and/or special operations forces units, specializing in amphibious landings, parachuting, rappelling and similar techniques, to conduct and effect attacks. (per wikipedia) ... which is how I like to think about the command-line scripts I author. AUTHOR Al Newkirk COPYRIGHT AND LICENSE This software is copyright (c) 2012 by awncorp. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.