NAME
Common::CLI - Command line applications made easy.
SYNOPSIS
package My::Application;
use base 'Common::CLI';
# This sub will be used by init() if no argument is given to new()
sub arguments {
return (
profile => {
'optional' => [
[ 'output-format=s', 'Output format' ],
],
'defaults' => {
'output-format' => 'html',
},
}
);
}
# This is your main subroutine, which will be called by run() after options
# parsing and validation
sub main {
my ( $self, $options ) = @_;
my $output_format = $options->{'output-format'};
...
# This will be used by run() to exit
return $status;
}
package main;
# Instantiate and run your brand new application
My::Application->new()->run();
ABSTRACT
Common::CLI is a glue between Getopt::Long and Data::FormValidator, aimed to be a handy tool to construct command line interface programs.
The Data::FormValidator profile was slightly modified, to handle Getopt::Long parameters and help information.
After successful parsing, the result is validated against Data::FormValidator, which is responsible for validation constraints and applying default values.
Then, it surprisingly delegates control to main()
subroutine, which will contain your business logic.
Common::CLI will handle by default the --help
option, which will display usage information, based on the profile
given, and exit. If there's some non-existant, missing or invalid option, it will inform you what went wrong, and also display the usage.
API
- new( %profile )
-
If
%profile
isundef
, will use package's definedarguments()
otherwise will use%profile
to build options used by Getopt::Long, profile used by Data::FormValidator and help information.package My::Application; ... My::Application->new( profile => { 'optional' => [ [ 'notify=s@', 'Notify given email after execution' ] ], } );
- init( %args )
-
This method is used to initialize the object. Really. Basically it generates Data::FormValidator compatible profile, Getopt::Long compatible options and help information. If you're planning to override this, don't forget to call
SUPER::init(%args)
! - profile( $profile )
-
Setter and getter for Data::FormValidator compatible profile.
- options( $options )
-
Setter and getter for Getopt::Long compatible options.
- help( $help )
-
Setter and getter for generated help information.
- input( $input )
-
Setter and getter for user input data (usually Getopt::Long parsed options).
- validate_options()
-
Validated parsed input from command line against informed profile using Data::FormValidator. Returns a list with the parsed options after validation and invalid and missing options if any:
my ( $options, $invalid, $missing ) = $self->validate_options();
- run()
-
run()
is responsible basically for obtain validated options usingvalidate_options()
, and display the help message if anything went wrong or if user required to do so. If any of this happened, it will executemain()
and exit using its exit code. - main( $options )
-
This routine must be overriden by all
Common::CLI
subclasses. It will be filled by the developer with any business logic he or she wants. - arguments()
-
This routine can be overriden Common::CLI subclasses, and must return a hash containing at least a
profile
key, withCommon::CLI
profile data. It will be used if theprofile
key is not provided innew()
:package My::Application; sub arguments { return ( profile => { 'optional' => [ [ 'email', 'Your email address', ] ], }, ); } ... package main; My::Application->new()->run();
- display_help()
-
Print the help usage to STDOUT. This won't print missing or invalid options information. An example:
Usage: sample.pl OPTIONS --help Show help --notify=s@ Notify given email after execution
- __parse_profile()
-
Parse user given profile. Return a list with Data::FormValidator compatible profile hashref, a Getopt::Long compatible options arrayref and help information arrayref:
my ( $profile, $options, $help ) = __parse_profile($given_profile);
- __parse_command_line_options( $options )
-
Returns a hashref with Getopt::Long parsed options, or
undef
if something went wrong:my $input = __parse_command_line_options($options);
- __display_missing( $missing )
-
Being
$missing
an arrayref of missing elements from obtained fromvalidate_options()
, print them to STDOUT. - __display_invalid( $invalid )
-
Being
$invalid
an arrayref of missing elements from obtained fromvalidate_options()
, print them to STDOUT. - __display_usage()
-
Display the usage header.
AUTHOR
Copyright (c) 2008, Igor Sutton Lopes "<IZUT@cpan.org>". All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.