我有一个带有可能的命令行参数的字符串(使用Read-Eval-Print-Loop程序),我希望它在传递给Getopt :: Long时被解析为类似于命令行参数.
详细说明:
我有一个字符串
$str = '--infile /tmp/infile_location --outfile /tmp/outfile'
我希望它被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 );
有没有好/更好的方法?
退房的部分由任意字符串解析选项中进行的Getopt ::龙文页,我觉得它你在寻找什么.
而不是在空格上拆分,使用内置的glob函数.除了在空格上拆分外,还将执行标准命令行扩展,然后返回一个列表.(例如*会给出一个文件列表等).我还建议在一般原则上本地化@ARG.
除此之外,这是您可以在不重写GetOptions的情况下完成此任务的唯一方法. (显然我需要更仔细地阅读文档.)
哇!!!
我想我可以使用bentilly和dinomite的答案并执行以下操作:
使用glob来执行标准的命令行扩展
将glob之后的数组传递给GetOpt :: Long的GetOptionsFromArray方法(参见此处)
代码看起来像......
GetOptionsFromArray ([glob ($input_line)]);
那只是一行..酷(我知道我必须做一些错误检查等)..但它的酷...