NAME

MOP4Import::Base::CLI - Base class for Command Line Interface app.

SYNOPSIS

MyCLI.pm (chmod a+x this!).

#!/usr/bin/env perl
package MyCLI;
use MOP4Import::Base::CLI -as_base, qw/terse_dump/,
    [fields =>
       qw/verbose debug _dbh/,
       [dbname =>
           doc => "filename of sqlite3 database",
           default => "myapp.db"]
    ];

use MOP4Import::Types
  TableInfo => [[fields => qw/
			       TABLE_SCHEM
			       TABLE_NAME
			       TABLE_CAT
			       TABLE_TYPE
			       REMARKS
			     /]];

sub cmd_tables {
  (my MY $self, my ($pattern, $type)) = @_;
  my $sth = $self->DBH->table_info(undef, undef
				   , $pattern // '%'
				   , $type // 'TABLE');
  while (my TableInfo $row = $sth->fetchrow_hashref) {
    print $self->{verbose} ? terse_dump($row) : $row->{TABLE_NAME}, "\n";
  }
}

use DBI;
sub DBH {
  (my MY $self) = @_;
  $self->{_dbh} //= do {
    DBI->connect("dbi:SQLite:dbname=$self->{dbname}", undef, undef
		 , {PrintError => 0, RaiseError => 1, AutoCommit => 1});
  };
}

MY->run(\@ARGV) unless caller;
1;

Then from command line:

% ./MyCLI.pm
Usage: MyCLI.pm [--opt-value].. <command> [--opt-value].. ARGS...

Commands:
  help
  tables

Options:
  --verbose
  --debug
  --dbname        filename of sqlite3 database
% sqlite3 myapp.db "create table foo(x,y)"
% ./MyCLI.pm tables
foo
% ./MyCLI.pm --verbose tables
{'REMARKS' => undef,'TABLE_NAME' => 'foo','TABLE_SCHEM' => 'main','sqlite_sql' => 'CREATE TABLE foo(x,y)','TABLE_TYPE' => 'TABLE','TABLE_CAT' => undef}
% 

DESCRIPTION

MOP4Import::Base::CLI is a MOP4Import family and an easy-to-start base class for Command Line Interface applications.

METHODS

run (\@ARGV)

MY->run(\@ARGV) unless caller;
1;

This parses minimum posix style options (--name or --name=value) and create your object with them. Then cmd_... entry method of your object will be invoked with first word argument.