-1

我正在使用 Getopt::Long 来解析传递给我的程序的选项。我想格式化这些选项(在修改它们之后)以传递给另一个程序。

Getopt 是这样做的,还是可能有另一个模块可以为我做到这一点?

例子:

use Getopt::Long qw(:config no_ignore_case );

# set defaults
my %ARG;
$ARG{config} = './default-config.ini';
$ARG{debug} = 0;

# process command line options
GetOptions( \%ARG, 'config|c=s', 'debug!');

# modify them as necessary
if ( if $ARG{debug} ) {
   $ARG{config} = './debug-config.ini' ;
   $ARG{debug} = 0;
   $ARG{verbal} = 1;
}

# format options string to pass to other command

# expecting something like this in options string:

# '-config=./debug-config.ini --verbal'

$options_string = some_method_or_module_to_format( %ARG, 'config=s', 'verbal' );


`some-other-script-1.pl $options_string`;

`some-other-script-2.pl $options_string`;

`some-other-script-3.pl $options_string`;
4

2 回答 2

1

不,Getopt::Long只是“从 解析命令行@ARGV,识别和删除指定的选项”。它不对选项进行任何格式化。

如果要保留传递给程序的所有选项,可以在调用之前复制原始数组GetOptions

my @opts = @ARGV;
GetOptions( ... )
于 2014-03-31T12:46:58.623 回答
0

我想格式化这些选项(在修改它们之后)以传递给另一个程序。Getopt 是这样做的,还是可能有另一个模块可以为我做到这一点?

指示一个模块如何做它所花费的时间与指示 Perl 如何做它所花费的时间一样长。不需要这样的模块。

my @args;
push @args, "--config", $ARG{config} if defined($ARG{config});
push @args, "--verbal"               if $ARG{verbal};

my $args = shell_quote(@args);
于 2014-03-31T13:11:16.757 回答