Perl6: Wie lese ich gemischte Parameter von der Kommandozeile?

9

Ich lösche den Beitrag, da ich nicht zur Zensur / Bearbeitung konsultiert wurde.

Todd
quelle
Siehe zB Getopt :: Long
Håkon Hægland
Hallo @Todd. Ich kann sehen, dass Sie von den Änderungen anderer verärgert waren, vermutlich weil Sie nicht wissen, wie SO in Bezug auf Änderungen funktioniert , z. B. wenn Sie "Danke" herausarbeiten . Ihre eigene Bearbeitung Ihrer Frage ist jedoch selbst für andere ärgerlich, da sie die Zeit / Mühe derer, die Ihnen geantwortet haben, und anderer, die SO verwenden, entwertet. Bitte erwägen Sie, mir Ihren Segen zu geben, um Ihre Frage so wie sie war wieder aufzunehmen .
Raiph

Antworten:

9

Hier ist ein Beispiel mit 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;

Beispiellauf:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]
Håkon Hægland
quelle
@Todd Alle Argumente , die als Optionen verarbeitet werden , werden von entfernt @*ARGSdurch get-options(). Daher bleiben @*ARGSnachträglich Argumente ohne Optionen übrig . Siehe aktualisierte Antwort
Håkon Hægland
Es wird helpein Standardwert von 0 festgelegt. Wahrscheinlich ist es besser, einen Booleschen Wert zu verwenden, help => Falseda die Hilfeoption normalerweise zum Anzeigen einer Hilfemeldung verwendet wird. Ich habe die Antwort so bearbeitet, dass sie helpboolesch ist.
Håkon Hægland
8

Verwenden Sie das MAINSub :

#!/usr/bin/env raku

use v6;

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

Sie können diese Parameter in beliebiger Reihenfolge eingeben:

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

Außerdem werden zusätzliche Parameter erfasst, die Ihnen die tatsächlichen Parameter anzeigen:

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

Wenn Sie nur an Parametern mit einem einzigen Strich interessiert sind, benötigen Sie GetOpt :: Long, wie von Hakon angegeben

jjmerelo
quelle