【问题标题】:Perl6: how do I read mixed parameters from the command line?Perl6:如何从命令行读取混合参数?
【发布时间】:2019-11-30 02:31:39
【问题描述】:

我一直从命令行运行程序,允许您混合参数的顺序。如果你在混合物中加入额外的东西,他们就会抓住你。例如:

$xxx -r abc  -q def  -w xyz

$xxx -w xyz  -q def  -r abc 

他们是怎么做到的?有这个模块吗?

【问题讨论】:

标签: raku


【解决方案1】:

这里是一个使用Getopt::Long的例子:

use v6;
use Getopt::Long;

my %opt = help => False, 'r=s' => "", 'q=s' => "", 'w=s' => "";
my %options = get-options(%opt).hash;
say %options;
say @*ARGS;

示例运行:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]

【讨论】:

  • @Todd 所有作为选项处理的参数都被get-options()@*ARGS中删除。所以非选项参数之后会留在@*ARGS 中。查看更新的答案
  • 它将help 设置为默认值0。可能最好使用布尔值:help => False,因为帮助选项通常用于显示帮助消息。我已经编辑了答案,使得help 是一个布尔值。
【解决方案2】:

使用MAIN sub

#!/usr/bin/env raku

use v6;

sub MAIN(:$these ="These", :$are="Are", :$params="Params") {
    say "$these $are $params";
}

您可以按任意顺序键入这些参数:

./command-line.p6 --are=well --these=those
those well Params

并且还会捕获任何额外的参数,向您显示实际参数:

./command-line.p6 --are=well --these=those --not=this_one
Usage:
  ./command-line.p6 [--these=<Any>] [--are=<Any>] [--params=<Any>]

如果您只对带有单个破折号的参数感兴趣,you'll need GetOpt::Long as indicated by Hakon

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 2023-03-30
    • 2020-01-09
    • 1970-01-01
    • 2011-07-06
    • 2016-06-09
    相关资源
    最近更新 更多