Perl6: jak odczytać mieszane parametry z wiersza poleceń?

9

Usuwam post, ponieważ nie konsultowano mnie w sprawie cenzury / redakcji.

Todd
źródło
Patrz np. Getopt :: Long
Håkon Hægland
Cześć @Todd. Widzę, że denerwujesz się modyfikacjami innych osób, prawdopodobnie dlatego, że nie wiesz, jak działa SO w odniesieniu do edycji , na przykład edytując „dzięki” . Jednak twoja własna edycja twojego pytania sama denerwuje innych, ponieważ dewaluuje czas / wysiłek tych, którzy odpowiedzieli ci i innych, którzy używają SO. Proszę, rozważ udzielenie mi błogosławieństwa, aby przywrócić twoje pytanie tak, jak było .
raiph

Odpowiedzi:

9

Oto przykład użycia 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;

Przykładowy przebieg:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]
Håkon Hægland
źródło
@Todd Wszystkie argumenty przetwarzane jako opcje są usuwane @*ARGSprzez get-options(). Zatem argumenty niezwiązane z opcjami zostają @*ARGSpóźniej. Zobacz zaktualizowaną odpowiedź
Håkon Hægland
Ustawia helpdomyślną wartość na 0. Prawdopodobnie lepiej byłoby użyć wartości logicznej: help => Falseponieważ opcja pomocy jest zwykle używana do wyświetlania komunikatu pomocy. Zredagowałem odpowiedź tak, że helpto boolean.
Håkon Hægland
8

Użyj MAINsub :

#!/usr/bin/env raku

use v6;

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

Możesz wpisać te parametry w dowolnej kolejności:

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

I również złapie każdy dodatkowy parametr, pokazujący rzeczywiste parametry:

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

Jeśli interesują Cię parametry tylko z jednym myślnikiem, potrzebujesz GetOpt :: Long, jak wskazuje Hakon

jjmerelo
źródło