我有一串可能的命令行参数(使用一读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来覆盖它。

强制性POSIXLY_CORRECT轶事

似乎方法GetOptionsFromArray和GetOptionsFromString仅在v2.36中添加,而且Murphy会说我只有2.35版本。

现在,我想我必须和当地的@ARGV一起生活。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top