MAIN中无法访问的命令行选项

时间:2019-05-05 08:51:07

标签: syntax perl6

zef search包含:$update作为命名参数:

 multi MAIN('search', Int :$wrap = False, :$update, *@terms ($, *@))

但是,不能这样识别:

% zef search --update
Usage:
  /home/jmerelo/.rakudobrew/bin/../moar-2019.03.1/install/share/perl6/site/bin/zef [--wrap=<Int>] search [<terms> ...] -- Get a list of possible distribution candidates for the given terms
  /home/jmerelo/.rakudobrew/bin/../moar-2019.03.1/install/share/perl6/site/bin/zef [--version] -- Detailed version information
  /home/jmerelo/.rakudobrew/bin/../moar-2019.03.1/install/share/perl6/site/bin/zef [-h|--help]

我在这里想念什么?我如何为此$update分配一个值?

1 个答案:

答案 0 :(得分:5)

如果我自己运行这个MAIN候选人,它会起作用:

$ perl6 -e 'multi MAIN("search", Int :$wrap = False, :$update, *@terms ($, *@)) { say "foo" }' search --update
foo

所以在我看来,有不止一个候选人匹配,这导致出现USAGE反馈消息。

已命名的参数仅用作决胜局,除非它们是强制性的(这使它们有效地成为调度过程的一部分)。所以也许解决方法是选出两个候选人:

multi MAIN('search', Int :$wrap = False, :$update!, *@terms ($, *@)) { ... }
multi MAIN('search', Int :$wrap = False,            *@terms ($, *@)) { ... }