NAME
Getopt::Module - handle -M and -m options like perl
SYNOPSIS
use Getopt::Long;
use Getopt::Module qw(GetModule);
my ($modules, $eval);
GetOptions(
'M|module=s' => GetModule(\$modules),
'm=s' => GetModule(\$modules, no_import => 1),
'e|eval=s' => \$eval,
);
my $sub = eval "sub { $modules $eval }";
command -Mautobox::Core -MBar=baz,quux -e '$_->split(...)->map(...)->join(...)'
DESCRIPTION
This module provides a convenient way for command-line Perl scripts to handle -M
and -m
options in the same way as perl.
EXPORT
None by default.
GetModule
Signature: (ArrayRef | CodeRef | HashRef | ScalarRef [, Hash | HashRef ]) -> CodeRef
my $sub = GetModule($target, %options);
Takes a target and an optional hash or hashref of options and returns a subroutine that can be used to handle a Getopt::Long option. The option's value is parsed and its components (module name, import type and parameters) are assigned to the target in the following ways.
TARGETS
ArrayRef
An eval
able use
or no
statement is pushed onto the arrayref e.g.:
Command:
command -MFoo=bar,baz -M-Quux
Usage:
my $modules = [];
GetOptions(
'M|module=s' => GetModule($modules),
);
Result ($modules
):
[ "use Foo qw(bar baz);", "no Quux;" ]
CodeRef
The coderef is passed 3 parameters:
name
The name of the Getopt::Long option e.g.
M
.eval
The option's value as a
use
orno
statement e.g: "use Foo qw(bar baz);".spec
A hashref that makes the various components of the option available separately e.g.:
Command:
command -MFoo=bar,baz
Usage:
sub process_module { ... } GetOptions( 'M|module=s' => GetModule(\&process_module); );
The following hashref would be passed as the third argument to the
process_module
sub:{ args => 'bar,baz', # the comma-separated list of import/unimport args; undef if none are supplied eval => 'use Foo qw(bar baz);', # the evalable statement representing the option's value method => 'import', # the method call represented by the statement: either "import" or "unimport" module => 'Foo' # the module name name => 'M', # the Getopt::Long option name statement => 'use', # the statement type: either "use" or "no" value => 'Foo=bar,baz', # The Getopt::Long option value }
HashRef
Pushes the statement onto the arrayref pointed to by $hash->{ $module_name }
, creating it if it doesn't exist. e.g.:
Command:
command -MFoo=bar -M-Foo=baz -MQuux
Usage:
my $modules = {};
GetOptions(
'M|module=s' => GetModule($modules);
);
Result ($modules
):
{
Foo => [ "use Foo qw(bar);", "no Foo qw(baz);" ],
Quux => [ "use Quux;" ],
}
ScalarRef
use
/no
statements are appended to the referenced scalar separated by the "separator" option. The referenced scalar can be undef. If no separator is supplied, it defaults to a single space (" ") e.g.:
Command:
command -MFoo=bar -M-Baz=quux
Usage:
my $statements;
GetOptions(
'M|module=s' => GetModule(\$statements),
);
Result ($statements
):
"use Foo qw(bar); no Baz qw(quux);"
OPTIONS
no_import
By default, if no import
/unimport
parameters are supplied e.g.:
command -MFoo
the use
/no
statement omits the parameter list:
use Foo;
If no parameters are supplied and no_import
is set to a true value, the resulting statement disables the import
/unimport
method call by passing an empty list e.g:
use Foo ();
Corresponds to perl's -m
option.
separator
The separator used to separate statements assigned to the scalar-ref target. Default: a single space (" ").
VERSION
0.0.1
SEE ALSO
AUTHOR
chocolateboy <chocolate@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2014 by chocolateboy
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.