perl 使用Getopt::Long解析的格式化选项以传递给另一个程序

9vw9lbht  于 2023-06-23  发布在  Perl
关注(0)|答案(2)|浏览(143)

我使用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`;
fhg3lkii

fhg3lkii1#

不,Getopt::Long只是“解析来自@ARGV的命令行,识别并删除指定的选项”。它不对选项进行任何格式设置。
如果你想保留传递给程序的所有选项,你可以在调用GetOptions之前复制原始数组:

my @opts = @ARGV;
GetOptions( ... )
kwvwclae

kwvwclae2#

  • 我想格式化这些选项(修改后)传递到另一个程序。Getopt是否可以做到这一点,或者是否有其他模块可以为我做到这一点?*

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

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

my $args = shell_quote(@args);

相关问题