Perl GetOpt Long处理相似的输入名称

Perl GetOpt Long处理相似的输入名称,perl,Perl,我正在运行一个带有很多输入选项的perl脚本,其中一个选项是: 'errorcode=s{1,}' => \@ecodes, 如果输入的内容与输入不匹配,则在GetOptions的末尾有一个骰子。但是,如果我输入'--ecode 500',程序就会运行 为什么剧本没有消亡?如果我尝试像“--testing 123”这样的其他方法,它确实会死掉。我猜您有一个选项,带有一个必需的参数,例如 "foo=s" => \$foo, 你做了一些类似的事情 program -

我正在运行一个带有很多输入选项的perl脚本,其中一个选项是:

        'errorcode=s{1,}'  => \@ecodes,
如果输入的内容与输入不匹配,则在GetOptions的末尾有一个骰子。但是,如果我输入'--ecode 500',程序就会运行


为什么剧本没有消亡?如果我尝试像“--testing 123”这样的其他方法,它确实会死掉。

我猜您有一个选项,带有一个必需的参数,例如

"foo=s" => \$foo,
你做了一些类似的事情

program --foo --ecode 500
它将
--ecode
放在
$foo
中,将
500
放在
@ARGV

$ perl -MGetopt::Long -e'
   use feature qw( say );
   GetOptions("foo=s" => \$foo)
      or die "usage\n";
   say "ok <$foo> <@ARGV>";
' -- \
   --ecode 500
Unknown option: ecode
usage

$ perl -MGetopt::Long -e'
   use feature qw( say );
   GetOptions("foo=s" => \$foo)
      or die "usage\n";
   say "ok <$foo> <@ARGV>";
' -- \
   --foo --ecode 500
ok <--ecode> <500>
$perl-MGetopt::Long-e'
使用特征qw(例如);
GetOptions(“foo=s”=>\$foo)
或“用法”\n;
说“好”;
' -- \
--ecode 500
未知选项:ecode
使用
$perl-MGetopt::Long-e'
使用特征qw(例如);
GetOptions(“foo=s”=>\$foo)
或“用法”\n;
说“好”;
' -- \
--foo——ecode 500
好啊

能否显示所有相关代码以及如何运行?我无法复制你的问题。请注意,Getopt::Long默认情况下支持,因此根据您定义的其他选项,
--error
--err
--e
都可以工作。请您提供一个最小的、可运行的问题演示?如果你不给我们看,很难看出你把事情搞砸了!很好的猜测,虽然它没有解释为什么
--测试123
会起作用,而
--ecode 500
不会起作用。@ThisSuitesBlack不是,这很简单:他们所做的不仅仅是将
--ecode 503
更改为
--测试123
--ecode 503
可能是另一个脚本/程序中较大命令行的一部分,而它们可能直接从命令行将
--testing 123
传递给程序。这也可以通过使用冒号
foo:s
来控制,然后命令行上需要一个值。@zdim,您正在描述
=s
。冒号将使该值成为可选值,导致
GetOptions(“foo:s”=>\$foo)
按照
--foo--ecode 500
的要求失败。当然,只有当
--foo
的值确实是可选的时,这才是有效的解决方案。@ikegami哦,当然。在我看来,它需要命令行上的一个值(由用户正确提供),因为否则它实际上会失败,但在界面方面,情况正好相反。对不起,吵闹了。第二次我在这个问题上颠倒过来:(