如何使用GetOpt :: Long :: GetOptions解析字符串?

Jag*_*mal 7 perl getopt-long

我有一个带有可能的命令行参数的字符串(使用Read-Eval-Print-Loop程序),我希望它在传递给Getopt :: Long时被解析为类似于命令行参数.

详细说明:

我有一个字符串

$str = '--infile /tmp/infile_location --outfile /tmp/outfile'
Run Code Online (Sandbox Code Playgroud)

我希望它被GetOptions解析,以便我更容易添加新选项.

我能想到的一个解决方法是将字符串拆分为空格,并用新数组替换@ARGV,然后调用GetOptions.就像是 ...

my @arg_arr = split (/\s/, $input_line);

# This is done so that GetOptions reads these new arguments
@ARGV = @arg_arr;
print "ARGV is : @ARGV\n";
GetOptions (
            'infile=s'  => \$infile,
            'outfile=s' => \$outfile
           );
Run Code Online (Sandbox Code Playgroud)

有没有好/更好的方法?

Dre*_*ens 15

退房的部分由任意字符串解析选项进行的Getopt ::龙文页,我觉得它你在寻找什么.


use*_*318 7

而不是在空格上拆分,使用内置的glob函数.除了在空格上拆分外,还将执行标准命令行扩展,然后返回一个列表.(例如*会给出一个文件列表等).我还建议在一般原则上本地化@ARG.

除此之外,这是您可以在不重写GetOptions的情况下完成此任务的唯一方法. (显然我需要更仔细地阅读文档.)


Jag*_*mal 5

哇!!!

我想我可以使用bentilly和dinomite的答案并执行以下操作:

  • 使用glob来执行标准的命令行扩展
  • 将glob之后的数组传递给GetOpt :: Long的GetOptionsFromArray方法(参见此处)

代码看起来像......

GetOptionsFromArray ([glob ($input_line)]);
Run Code Online (Sandbox Code Playgroud)

那只是一行..酷(我知道我必须做一些错误检查等)..但它的酷...