Perl6:如何从命令行读取混合参数?


9

我正在删除该帖子,因为没有就检查/编辑进行咨询。



嗨,@托德。我可以看到您对其他人的编辑感到沮丧,大概是因为您不熟悉SO在编辑方面的工作方式,例如删除“ thanks”。但是,您自己对问题的编辑本身会使其他人感到沮丧,因为它贬低了回答您的人和使用SO的其他人的时间/精力。请考虑给我您的祝福,以恢复您的问题
raiph

Answers:


9

这是使用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所有参数从取出@*ARGSget-options()。因此,非选项参数将留在@*ARGS后面。见更新答案
哈康Hægland

它设置help为默认值0。使用布尔值可能会更好:help => False因为help选项通常用于显示帮助消息。我已经将答案编辑help为布尔值。
哈康·海格兰

8

使用MAINsub

#!/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>]

如果您只对带有单横线的参数感兴趣,则需要使用Hakon指示的GetOpt :: Long

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.