Getopt-EX
view release on metacpan or search on metacpan
lib/Getopt/EX/Module.pm view on Meta::CPAN
elsif ($arg[0] eq "mode") {
shift @arg;
for (@arg) {
if (/^(no-?)?(.*)/i) {
$obj->mode($2 => $1 ? 0 : 1);
}
}
}
elsif ($arg[0] eq "help") {
$obj->help($arg[1], $arg[2]);
}
else {
warn sprintf("Unknown operator \"%s\" in %s\n",
$arg[0], $obj->title);
}
$obj;
}
sub builtin {
my $obj = shift;
my $list = $obj->{Builtin};
@_ ? push @$list, @_
: @$list;
}
sub autoload {
my $obj = shift;
my $module = shift;
my @option = map { split ' ' } @_;
my $hash = ($obj->{Autoload}->{$module} //= {});
my $list = $obj->{Automod};
for (@option) {
$hash->{$_} = 1;
$obj->help($_, "autoload: $module");
}
push @$list, $module if not grep { $_ eq $module } @$list;
}
sub call {
my $obj = shift;
my $list = $obj->{Call};
@_ ? push @$list, @_
: @$list;
}
sub call_if_defined {
my($module, $name, @param) = @_;
my $func = "$module\::$name";
if (defined &$func) {
no strict 'refs';
$func->(@param);
}
}
sub run_inits {
my $obj = shift;
my $argv = shift;
my $module = $obj->module;
local @ARGV = ();
call_if_defined $module, "initialize" => ($obj, $argv);
for my $call ($obj->call) {
my $func = $call->can('call') ? $call : parse_func($call);
$func->call;
}
call_if_defined $module, "finalize" => ($obj, $argv);
}
1;
=head1 NAME
Getopt::EX::Module - RC/Module data container
=head1 SYNOPSIS
use Getopt::EX::Module;
my $bucket = Getopt::EX::Module->new(
BASECLASS => $baseclass,
FILE => $file_name / MODULE => $module_name,
);
=head1 DESCRIPTION
This module is usually used from L<Getopt::EX::Loader>, and keeps
all data about loaded rc file or module.
=head2 MODULE
After user defined module was loaded, subroutine C<initialize> is
called if it exists in the module. At this time, container object is
passed to the function as the first argument and following command
argument pointer as the second. So you can use it to directly touch
the object contents through class interface.
Following C<initialize>, function defined with module option is called.
Finally subroutine C<finalize> is called if defined, to finalize start
up process of the module.
=head2 FILE
As for rc file, section after C<__PERL__> mark is executed as Perl
program. At this time, module object is assigned to variable
C<$MODULE>, and you can access module API through it.
if (our $MODULE) {
$MODULE->setopt('default', '--number');
}
=head1 RC FILE FORMAT
=over 7
=item B<option> I<name> I<string>
( run in 2.099 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )