CLI-Simple
view release on metacpan or search on metacpan
lib/CLI/Simple/Modulino.pm view on Meta::CPAN
use English qw(-no_match_vars);
use parent qw(CLI::Simple);
caller or exit __PACKAGE__->main;
########################################################################
sub cmd_create_modulino {
########################################################################
my ($self) = @_;
my $module_name = $self->get_module;
my $alias = $self->get_alias;
if ( !$alias ) {
$alias = $module_name;
$alias =~ s/::/-/xsmg;
$alias = lc $alias;
}
my $installbindir = $self->get_installbindir;
if ( !$installbindir ) {
if ( defined $ENV{PERL_LOCAL_LIB_ROOT} ) {
$installbindir = "$ENV{PERL_LOCAL_LIB_ROOT}/bin";
}
else {
require Config;
($installbindir) = Config::config_re(qr/installsitebin/xsm);
($installbindir) = $installbindir =~ /=\'([^\']+)/xsm;
}
}
$installbindir = abs_path($installbindir);
die "ERROR: no such directory ($installbindir) or inaccessible\n"
if !-d $installbindir;
local $RS = undef;
my $script = <DATA>;
# remove pod
$script =~ s/\A(.*)^=pod.*\z/$1/xsm;
# customize
$script =~ s/[@]MODULINO_WRAPPER[@]/$alias/xsm;
$script =~ s/[@]PERL_MODULE_NAME[@]/$module_name/xsm;
my $modulino = sprintf '%s/%s', $installbindir, $alias;
open my $fh, '>', $modulino
or die "ERROR: could not open $installbindir for writing:\n$OS_ERROR\n";
print {$fh} $script;
close $fh
or die "ERROR: could not close handle for $modulino\n:$OS_ERROR\n";
chmod 0755, $modulino;
print "$alias installed as $modulino\n";
return $SUCCESS;
}
########################################################################
sub main {
########################################################################
my $option_specs = [
qw(
alias|a=s
help|h
installbindir|i=s
module|m=s
)
];
my $commands = {
'create-modulino' => \&cmd_create_modulino,
default => \&cmd_create_modulino,
};
return __PACKAGE__->new(
commands => $commands,
option_specs => $option_specs
)->run;
}
1;
__DATA__
#!/usr/bin/env bash
#-*- mode: sh; -*-
# modulino invocation
MODULINO_WRAPPER=@MODULINO_WRAPPER@
MODULE_NAME=@PERL_MODULE_NAME@
MODULE_PATH=$(MODULE_PATH="${MODULE_NAME//:://}.pm" perl -M$MODULE_NAME -e 'print $INC{$ENV{MODULE_PATH}};')
MODULINO_WRAPPER=$MODULINO_WRAPPER perl $MODULE_PATH "$@"
=pod
=head1 NAME
CLI::Simple::Modulino - Create CLI wrapper around a modulino
=head1 SYNOPSIS
# create $RealBin/my-app
create-modulino -m My::App
# create /usr/local/bin/my-app
create-modulino -i /usr/local/bin -m My::App
# create /usr/local/bin app
create-modulino -a app -i /usr/local/bin -m My::App
=head2 Options
( run in 2.223 seconds using v1.01-cache-2.11-cpan-9581c071862 )