Perl6: ¿cómo leo parámetros mixtos desde la línea de comando?

9

Estoy borrando la publicación ya que no me consultaron sobre la censura / edición.

Todd
fuente
Ver, por ejemplo, Getopt :: Long
Håkon Hægland el
Hola @Todd Puedo ver que estaba molesto por las ediciones de otros, presumiblemente porque no está familiarizado con el modo en que SO funciona con respecto a las ediciones , por ejemplo, editando 'gracias' . Sin embargo, su propia edición de su pregunta es molesta para los demás, ya que devalúa el tiempo / esfuerzo de aquellos que le respondieron y otros que usan SO. Considere darme su bendición para restablecer su pregunta tal como estaba .
raiph

Respuestas:

9

Aquí hay un ejemplo usando 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;

Ejemplo de ejecución:

$ p.p6  -w xyz -q def -r abc hello
{help => False, q => def, r => abc, w => xyz}
[hello]
Håkon Hægland
fuente
@Todd Todos los argumentos que se procesan como opciones se quitan de @*ARGSpor get-options(). Entonces, los argumentos que no son opciones se dejan @*ARGSdespués. Ver respuesta actualizada
Håkon Hægland
Se establece helpen un valor predeterminado de 0. Probablemente sería mejor usar un booleano: help => Falseya que la opción de ayuda se usa generalmente para mostrar un mensaje de ayuda. He editado la respuesta de modo que helpsea ​​un booleano.
Håkon Hægland
8

Usa el MAINsub :

#!/usr/bin/env raku

use v6;

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

Puede escribir estos parámetros en cualquier orden:

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

Y también capturará cualquier parámetro adicional, mostrándole los parámetros reales:

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

Si solo le interesan los parámetros con un solo guión, necesitará GetOpt :: Long como lo indica Hakon

jjmerelo
fuente