Perl6: как мне прочитать смешанные параметры из командной строки?

9

Я удаляю пост, так как со мной не консультировались по поводу цензуры / редактирования.

Тодд
источник
Смотрите, например, Getopt :: Long
Håkon Hægland
Привет @ Тодд. Я вижу, что вы были огорчены изменениями других, вероятно, потому, что вы не знакомы с тем, как SO работает с изменениями , например, редактируя «спасибо» . Однако ваше собственное редактирование вашего вопроса само по себе огорчает других, поскольку оно обесценивает время / усилия тех, кто ответил вам, и тех, кто использует SO. Пожалуйста, подумайте о том, чтобы дать мне свое благословение, чтобы восстановить ваш вопрос таким, каким он был .
raiph

Ответы:

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 Все аргументы, которые обрабатываются в качестве опции удаляются из @*ARGSпути get-options(). Таким образом, аргументы без опций остаются в @*ARGSпоследующем. Смотрите обновленный ответ
Håkon Hægland
Он устанавливает helpзначение по умолчанию 0. Возможно , было бы лучше использовать логическое значение: help => Falseтак как опция помощи , как правило , используется , чтобы показать сообщение об ошибке. Я отредактировал ответ так, что helpэто логическое значение.
Хокон Хагланд
8

Используйте MAINподпункт :

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

Если вас интересуют параметры только с одной чертой, вам понадобится GetOpt :: Long, как указано Hakon

jjmerelo
источник