#!/usr/bin/env perl
my
$usage
=
<<"...";
Usage:
hither [<hither-opt>…] <hither-command> [<cmd-opt>…] [<cmd-arg>…]
Hither Options:
-q, --quiet - Suppress normal output
-v, --verbose - Print detailed info
-D, --debug - Print maximum info
-h, --help - Show basic command usage
For more help/info, try these commands:
hither help - Browse Hither documentation manual
hither help commands - List all hither commands
hither help <command> - Show help for a command
...
$ENV
{HITHER_QUIET} = 0;
$ENV
{HITHER_VERBOSE} = 0;
$ENV
{HITHER_DEBUG} = 0;
sub
run {
my
(
$self
) =
@_
;
$self
->check_help and
return
0;
$self
->get_options or
return
1;
$self
->exec_hither_command or
return
1;
}
sub
check_help {
my
(
$self
) =
@_
;
my
$argv
=
$self
->{argv};
for
(
@$argv
) {
if
( /^ ( -h | --help ) $/x ) {
print
$usage
;
return
1;
}
return
if
/^\w/;
}
}
sub
get_options {
my
(
$self
) =
@_
;
my
$argv
=
$self
->{argv};
while
(
@$argv
) {
$_
=
shift
@$argv
;
if
(/^\w/) {
$self
->{cmd} =
$_
;
$self
->{args} = [
@$argv
];
return
1;
}
elsif
(/^ ( -
q |
--quiet ) $/x) {
$ENV
{HITHER_QUIET} = 1;
}
elsif
(/^ ( -v | --verbose ) $/x) {
$ENV
{HITHER_VERBOSE} = 1;
}
elsif
(/^ ( -D | --debug ) $/x) {
$ENV
{HITHER_DEBUG} = 1;
}
else
{
warn
"Unknown hither option: '$_'\n"
;
return
;
}
}
$self
->{cmd} =
'shell'
;
return
1;
}
sub
exec_hither_command {
my
(
$self
) =
@_
;
my
$command
=
$self
->{cmd} or
die
;
my
$command_path
= `which hither-
$command
` or
do
{
warn
"Unknown hither command: '$command'\n"
;
return
;
};
chomp
$command_path
;
my
$args
=
$self
->{args} or
die
;
unshift
@$args
,
$command_path
;
exec
{
$command_path
}
@$args
or
do
{
warn
"Bad hither command: '$command':\n$!\n"
;
return
;
}
}
my
%options
= (
verbose
=> 0,
quiet
=> 0,
quiet
=> 0,
);
if
(
$ENV
{HITHER_TEST_MODE}) {
}
else
{
my
$self
=
bless
{
argv
=> [
@ARGV
],
opts
=> {},
cmd
=>
''
,
args
=> [],
}, __PACKAGE__;
exit
$self
->run();
}