Perl6: comment lire des paramètres mixtes depuis la ligne de commande?

9

Je supprime le message car je n'ai pas été consulté sur la censure / l'édition.

Todd
la source
Voir par exemple Getopt :: Long
Håkon Hægland
Salut @Todd. Je peux voir que vous avez été contrarié par les modifications des autres, probablement parce que vous n'êtes pas familier avec la façon dont SO fonctionne en ce qui concerne les modifications , par exemple en supprimant «merci» . Cependant, votre propre modification de votre question est en elle-même bouleversante pour les autres car elle dévalue le temps / l'effort de ceux qui vous ont répondu et de ceux qui utilisent SO. Pensez à me donner votre bénédiction pour rétablir votre question telle qu'elle était .
raiph

Réponses:

9

Voici un exemple utilisant 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;

Exemple d'exécution:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]
Håkon Hægland
la source
@Todd Tous les arguments traités comme options sont supprimés de @*ARGSpar get-options(). Les arguments non-options sont donc laissés @*ARGSaprès. Voir la réponse mise à jour
Håkon Hægland
Il définit helpune valeur par défaut de 0. Il serait probablement préférable d'utiliser un booléen: help => Falsepuisque l'option d'aide est généralement utilisée pour afficher un message d'aide. J'ai édité la réponse telle qu'elle helpest booléenne.
Håkon Hægland
8

Utilisez le MAINsous :

#!/usr/bin/env raku

use v6;

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

Vous pouvez taper ces paramètres dans n'importe quel ordre:

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

Et attrapera également tout paramètre supplémentaire, vous montrant les paramètres réels:

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

Si vous n'êtes intéressé que par les paramètres avec un seul tiret, vous aurez besoin de GetOpt :: Long comme indiqué par Hakon

jjmerelo
la source