我有一个perl脚本,它使用GetOpts long.A命令如
automate -action build,deploy -modules chat,email,login
很容易处理。
我想要实现的是,允许用户在参数之间给出空格。
E.g
automate -action build, deploy -modules chat, email, login
问题是,GetOpt::Long
在内部使用@ARGV
,根据需要设置变量,空格会更改@ARGV
数组,而这只会将'build'设为一个动作,只有'chat'作为脚本的模块,忽略了传递的其余参数。
是否有一种简单的方法来解析perl中的命令行?
我希望有,因为否则我将不得不使用一种非常hacky的方式来更改@ARGV
数组,然后再传递给GetOpts。
还有其他强大的库可以帮我吗?
---------------------------量身定做的脚本----------------- ---------------
GetOptions("action=s{1,4}"=>\@myactions,
"modules=s{,}"=>\@mymodules);
foreach(@mymodules)
{
if($_ eq $mymodules[0])
{
$mymodules= $mymodules.$_;
next;
}
if($dashboards =~ m/,$/ || $_ =~ m/^,/)
{
$mymodules= $mymodules.$_;
}
else
{
$mymodules= $mymodules.",".$_;
}
}
答案 0 :(得分:4)
查看Getopt :: Long perldoc中的Options with multiple values部分。它看起来与您正在寻找的类似。
示例:
GetOptions ("action=s{,}" => \@valuelist);
@values = split(/[\s,]+/,join(',' , @valuelist));
# @values will contain the list of values passed to the option.
# This can handle the scenarios:
# <command> -action build,deploy
# <command> -action build, deploy
# <command> -action build deploy
答案 1 :(得分:0)
这是非标准的命令行用法 - 因此您需要一个非标准的命令行解析器。如果您在http://search.cpan.org/搜索“getopt”,则会列出大约180个单独的条目,因此有很多可供选择。
从表面上看,您只是想识别一些长选项名称,然后在读取前一个选项名称时继续应用非选项参数。
你会坚持使用逗号吗?这样做很笨拙。我可以看到:
automate -action build deploy -modules chat email login
在某些争论结束时要求使用逗号会觉得 - 很奇怪。
您需要考虑双破折号选项是否具有特殊意义,以及单个破折号选项是否具有特殊意义:
somecmd -f - --
我不知道处理您选择的符号的Perl模块,或者它上面的任何微小变化。这与说没有这样的模块并不完全相同,但你正在尝试解析风格的一个稍微不寻常的参数,所以很可能没有人实现了你想要的。