GetOptions
обрабатывает @ARGV
, поэтому просто добавьте
local @ARGV = %{ $_[0] };
Тем не менее, гораздо менее волшебно использовать GetOptionsFromArray
из того же модуля.
GetOptionsFromArray([%{ $_[0] }], ...)
Но нет смысла использовать
genspicemeas::genspicemeas({ -f => "filename", -block => $block })
вместо
genspicemeas::genspicemeas( -f => "filename", -block => $block )
С последним вы бы добавили следующее:
local @ARGV = @_;
ИНиже приводится подход GetOptionsFromArray
:
GetOptionsFromArray(\@_, ...)
Обратите внимание, что при использовании GetOptions
или GetOptionsFromArray
вы можете использовать параметры, установленные в других местах программы, если вы не используете Configure
дляустановите их соответствующим образом перед вызовом GetOptions
или GetOptionsFromArray
.
Наконец, я бы просто использовал
sub genspicemeas {
my %opts = @_;
defined($opts{f}) or die(...); # Optional validation.
$opts{block} //= ...; # Optional setting default.
print "block name is $opts{block} and file name is $opts{f}\n";
}
genspicemeas::genspicemeas( f => "filename", block => $block );
Вы можете даже смешивать позиционные и опции.
sub search {
my $term = shift;
my %opts = @_;
...
if ($opts{case_insensitive}) { ... }
...
}
search("foo");
search("foo", case_insensitive => 0);
search("foo", case_insensitive => 1);