Scroll to navigation

App::CLI(3pm) User Contributed Perl Documentation App::CLI(3pm)


App::CLI - Dispatcher module for command line interface programs


    package MyApp;
    use base 'App::CLI';        # the DISPATCHER of your App
                                # it's not necessary putting the dispather
                                #  on the top level of your App

    package main;

    MyApp->dispatch;            # call dispather in where you want

    package MyApp::List;
    use base qw(App::CLI::Command); # any (SUB)COMMAND of your App

    use constant options => ( 
        "h|help"   => "help",
        "verbose"  => "verbose",
        'n|name=s'  => 'name',

    use constant subcommands => qw(User Nickname type); # if you want subcommands
                                                        # automatically dispatch to subcommands
                                                        # when invoke $ myapp list [user|nickname|--type]
                                                        # note 'type' lower case in first char
                                                        # is subcommand of old genre which is deprecated

    sub run {
        my ($self, @args) = @_;

        print "verbose" if $self->{verbose};
        my $name = $self->{name}; # get arg following long option --name

        if ($self->{help}) {
            # if $ myapp list --help or $ $ myapp list -h
            # just only output PODs
        } else {
            # do something when imvoking $ my app list 
            # without subcommand and --help

    package MyApp::List::User;
    use base qw(App::CLI::Command);
    use constant options => (
        "h|help"  =>  "help",

    sub run {
        my ($self,@args) = @_;
        # code for listing user

    pakcage MyApp::List::Nickname;
    use base qw(App::CLI::Command);
    use constant options => (
        "sort=s"  =>  "sort",

    sub run {
        my ($self,@args) = @_;
        # code for listing nickname

    package MyApp::List::type;   # old genre of subcommand could not be cascading infinitely
    use base qw(MyApp::List);    # should inherit its parents command

    sub run {
        my ($self, @args);
        # run to here when invoking $ myapp list --type 

    package MyApp::Help;
    use base 'App::CLI::Command::Help';

    use constant options => (
        'verbose' => 'verbose',

    sub run {
        my ($self, @arg) = @_;
        # do something
        $self->SUPER(@_); # App::CLI::Command::Help would output PDOs of each command


"App::CLI" dispatches CLI (command line interface) based commands into command classes. It also supports subcommand and per-command options.

get_opt([@config], %opt_map)

    give options map, process by Getopt::Long::Parser

interface of dispatcher


find package name of subcommand in constant %alias

if it's finded, return ucfirst of the package name,

otherwise, return ucfirst of $cmd itself.

get_cmd($cmd, @arg)

return subcommand of first level via $ARGV[0]


App::CLI::Command Getopt::Long


Chia-liang Kao <> Cornelius Lin <> shelling <>


Copyright 2005-2006 by Chia-liang Kao <>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See <>

2015-11-22 perl v5.20.2