The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Cmd::Interpreter - Support for line-oriented command interpreters

SYNOPSIS

    use Cmd::Interpreter;
    our @ISA = qw(Cmd::Interpreter);

DESCRIPTION

Cmd::Interpreter provides a simple framework for writing line-oriented command interpreters.

USAGE

Write your class
    package Example::Hello;

    use strict;
    use warnings;

    use Cmd::Interpreter;

    our @ISA = qw(Cmd::Interpreter);

    sub help {
        my $self = shift;
        print "common help\n";
        return '';
    }

    sub do_hello {
        my $self = shift;
        print "Hello " . (shift || "World") . "!\n";
        return '';
    }

    sub help_hello {
        my $self = shift;
        print "help for hello\n";
        return '';
    }

    sub do_quit {
        my $self = shift;
        print "By\n";
        return "quit";
    }

    sub empty_line {
    }

    1;
Use your class
    #!/usr/bin/env perl
    use strict;
    use warnings;

    use Example::Hello;

    my $ex = Example::Hello->new(prompt => 'example> ');
    $ex->run("Welcome to hello world app.");

API - may be useful for introduce or overriding

Class constructor

You can pass program name as prog_name, prompt as prompt.

Your functions

Loop stoping if function returns true value aka stop flag.

do_foo
    Will execute on command 'foo'.
help_foo
    Will execute on command '?foo' or 'help foo'.
help
    Will execute when input is '?' or 'help'.

Framework functions

pre_loop
    Will execute before loop.
post_loop
    Will execute after loop.
pre_cmd
    Receive input line, return one (can be changed).
post_cmd
    Receive stop flag, line (from pre_cmd). Return stop flag.
default_action
    Will execute when input command not exists.
empty_line
    Will execute when input defined but empty. By default execute
    last command if one exists.
no_input
    Will execute when input undefined.
do_shell
    Will execute when input is '!cmd [args]' or 'shell cmd [args]'.

FAQ

Command history

Command history works fine with such module like Term::ReadLine::Perl.

git ready

You can install Cmd::Interpreter from cpanm git@github.com:oakulikov/Cmd-Interpreter.git.

AUTHOR

Oleg Kulikov <oakulikov@yandex.ru>

THANKS TO

Authors of Python Lib/cmd.py

LICENSE

Copyright (C) Oleg Kulikov.

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