我怎么分析串与GetOpt::长::GetOptions?
-
02-07-2019 - |
题
我有一串可能的命令行参数(使用一读Eval--印刷回路程序)并且我希望它是分析的类似命令行辩论时传递给Getopt::长。
以阐述:
我有一串
$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 :: Long的手册页中的任意字符串,I认为它完全符合您的要求。
其他提示
不使用空格分割,而是使用内置的glob函数。除了在空格上拆分外,还将执行标准命令行扩展,然后返回一个列表。 (例如*会给出一个文件列表等)。我还建议在一般原则上本地化@ARG。
除此之外,这是唯一可以不重写GetOptions的方法。(显然我需要更仔细地阅读文档。)
哇!!!
我认为我可以使用这两个bentilly和dinomite的答复,并做到以下几点:
- 使用滴执行标准的命令行扩张
- 通过列后glob到GetOptionsFromArray方法的GetOpt::长(见 在这里,)
代码可能看起来像...
GetOptionsFromArray ([glob ($input_line)]);
而这仅仅是一个线..很酷(我知道我必须做一些错误检查等)..但是它很酷...
当您在用户输入以外的其他内容上使用Getopt :: Long时,请注意某些功能因POSIXLY_CORRECT环境变量而异。您可以通过适当调用Configure来覆盖它。
似乎方法GetOptionsFromArray和GetOptionsFromString仅在v2.36中添加,而且Murphy会说我只有2.35版本。
现在,我想我必须和当地的@ARGV一起生活。
不隶属于 StackOverflow