In Perl 5 kann ich Getopt::Long
verwenden, um Kommandozeilenargumente mit einer gewissen Validierung zu parsen (siehe unten von Ссылка ).
Hier erzeugt =i
in "length=i"
eine Einschränkung des numerischen Typs für den mit --length
verknüpften Wert und =s
in "file=s"
erzeugt eine ähnliche Bedingung für den Zeichenkettentyp.
Wie mache ich etwas ähnliches in Perl 6?
Diese Funktion ist in Perl 6 integriert. Hier ist das Äquivalent zu Ihrem Getopt::Long
Code in Perl 6:
MAIN
ist eine spezielle Subroutine, die Befehlszeilenargumente basierend auf ihrer Signatur automatisch analysiert.
Str
und Num
stellen Beschränkungen für Zeichenfolgen und numerische Zeichen bereit.
Bool
macht $verbose
ein binäres Flag, das False
ist, wenn es fehlt oder wenn es als --/verbose
aufgerufen wird. (Das /
in --/foo
ist eine übliche Unix-Befehlszeilensyntax zum Setzen eines Arguments auf False
).
:
wird den Variablen in der Signatur der Unterroutine vorangestellt und benennt sie (anstelle von positionellen) Parametern.
Die Standardwerte werden mit $variable =
gefolgt von dem Standardwert angegeben.
Wenn Sie ein einzelnes Zeichen oder andere Aliase möchten, können Sie die :f(:$foo)
-Syntax verwenden.
:x(:$smth)
erstellt in diesem Beispiel zusätzlichen Alias für --smth
, z. B. den kurzen Alias -x
. Mehrere Aliase und vollständig benannt ist auch verfügbar, hier ist ein Beispiel: :foo(:x(:bar(:y(:$baz))))
erhalten Sie --foo
, -x
, --bar
, -y
und --baz
und wenn einer von ihnen an% co_de übergeben wird %.
$baz
kann auch mit Positionsargumenten verwendet werden. Zum Beispiel, hier ist Raten Sie die Nummer (aus Rosetta Code) . Es ist standardmäßig auf einen Wert von 0 und einen Wert von 100 eingestellt. Es kann jedoch eine beliebige Min- und Max-Zahl eingegeben werden. Mit MAIN
kann der Parameter innerhalb der Subroutine geändert werden:
Wenn Ihre Befehlszeilenargumente nicht mit einer is copy
-Signatur übereinstimmen, erhalten Sie standardmäßig eine nützliche Verwendungsnachricht. Beachten Sie, wie Subroutinen und Parameterkommentare, die mit MAIN
beginnen, intelligent in diese Verwendungsnachricht integriert werden:
Hier ist #=
kein definierter Kommandozeilenparameter und löst somit diese Verwendungsnachricht aus.
Siehe auch 2010 und die 2014 Perl 6 Adventskalenderbeiträge auf --help
, die nachgestellten Befehlszeilenargumente in Perl 6 und die Abschnitt von Übersicht 6 über MAIN .
Tags und Links perl6