Command-line arguments mit mehreren Werten
Mache ich ein perl-Skript und ich brauche, um mehrere Werte aus der Befehlszeile. Beispiel:
perl script.pl --arg1 op1 op2 op3
Bin ich mit Getopt::Long und bekomme ich diese zu arbeiten:
perl script.pl --arg1 op1 --arg1 op2 --arg1 op3
Aber ich wirklich brauchen (wollen) die erste option.
Habe ich überprüft, in Ihrer Dokumentation, und dies soll das tun, was ich will:
GetOptions('arg1=s{3}' => \@myArray);
http://search.cpan.org/~jv/Getopt-Long-2.38/lib/Getopt/Lang.pm#Options_with_multiple_values
Aber ich bin immer diese Fehlermeldung:
Fehler in option spec: "arg1=f{3}"
Irgendwelche Ideen /Lösungen?
- Sie benötigen ein separates Dienstprogramm für Ihr Skript die Argumente? Alle Argumente aus der Kommandozeile gespeichert werden, innerhalb der $ARGV-array. Sie können dann Sortieren und verfolgen Sie intern in Ihrem Skript. Quelle: cyberciti.biz/faq/howto-pass-perl-command-line-arguments Alternativ können Sie Ihre ein argument, und der Benutzer muss wickeln Sie Sie in Anführungszeichen: perl script.pl --arg1 "op1 op2 op3"
- Ich dachte über die Angebote und kann am Ende mit diesem, wenn ich keine andere Lösung finden. Ich bin mir bewusst, dass ich möglicherweise verwenden, $ARGV, aber ich habe viele Argumente und Getopt::Long wirklich hilft, verfolgen alles und es leider verpasst ARGV.
- Nur eine Idee: vielleicht gibt es etwas falsch mit der shell. Können Sie einige einfache print-debugging, um sicher sein, dass Sie bekommen, was Sie erwarten, in Ihrem Skript?
- Wenn ich den obigen code, und ich kann nicht laufen nichts, da das script abstürzt, bevor etwas getan wird mit der Fehlermeldung, die ich erwähnt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code bei mir funktioniert, aber es sieht aus wie das feature wurde nur noch Getopt::Long seit kurzem (version 2.35), so haben Sie vielleicht eine alte version von Getopt::Long. Führen Sie
sehen, welche version Sie haben.
Getopt::Long::Configure('pass_through');
vor der Ausführung GetOptions. So, alles, was GetOptions nicht erkennen, ist Links in @ARGV gespeichert und können Sie es selbst.Ich glaube, dein problem könnte
f{3}
.f
ist für float Argumente (reelle zahlen).Sollten Sie die
s
Planer, wenn Sie Zeichenfolgen als Argumente verwendet. In Bezug auf die Anzahl der Argumente, die Dokumentation sagt:Berücksichtigen hise Hinweis von Google docs und Ihren Bedürfnissen anpassen.
Ich bin mir nicht sicher, warum die Leute nicht bieten diese Lösung, aber dieser Beitrag ist so alt, es ist wahrscheinlich jetzt zu spät, um nützlich zu sein.
Gibt es keinen automatischen Weg, um dies zu tun, die ich gefunden habe.
Was Sie tun müssen, ist, zitieren mehrere Argumente und analysieren Sie innerhalb des Codes:
und teilen Sie Sie dann mit dem-m-argument den Wert innerhalb des Codes und tun, was notwendig ist, von dort.
Ähnliche Frage zu getoptions-Funktion perl-multi-Wert funktioniert nicht, denke ich ... wie auch immer, es scheint, dass nur mit
"optlist=s" => \@list,
funktioniert für mich, zu speichern, duplizieren /wiederholen Sie die Optionen in ein array; dies ist meine version:Beispiel (
test.pl
):Test Ausgabe: