CSH pasando $* al script perl no funciona

Estoy escribiendo un script de shell en csh y una de estas funciones es ejecutar un script de perl que recibe argumentos.

El propio script csh toma argumentos de la línea de comandos (almacenados como valores separados por espacios en $*) y los paso al script perl.

Mi problema es que cuando ejecuto:

perl myscript.pl --args $*

El script perl solo obtiene el primer argumento en $*. Sin embargo, si ejecuto:

echo $* desde dentro del script csh, imprime correctamente todos los argumentos.

Puede pasar cualquier cantidad de argumentos (por lo tanto, no puedo almacenar mis argumentos en variables estáticas y pasarlos).

¿Alguien sabe por qué sucede esto y cómo puedo solucionarlo?

preguntado el 12 de junio de 12 a las 16:06

¿Qué hace esta salida: perl -e 'print "@ARGV"' $*? -

./script.csh arg1 arg2 salidas: arg1 arg2 -

Estoy usando getopts en mi secuencia de comandos perl, ¿así que colocar -e los convierte en banderas, creo? -

tan pasando $* funciona bien Cualquiera que sea el módulo que use para procesar los argumentos, no lo está usando correctamente. Sugiero revisar los documentos. -

Estoy usando: GetOptions ("args=s@"=>\@my_args); en perl para capturar la matriz. ¿Es esto incorrecto? -

2 Respuestas

Necesitas cotizar $* en su secuencia de comandos csh:

perl myscript.pl --args "$*"

Esta es myscript.pl:

use warnings;
use strict;
use Getopt::Long;
use Data::Dumper;

my %opt;
GetOptions(\%opt, 'args=s');
print Dumper(\%opt);

Así es como lo llamo:

script.csh arg1 arg2

$VAR1 = {
          'args' => 'arg1 arg2'
        };

Respondido el 12 de junio de 12 a las 16:06

Si desea que los argumentos terminen en una matriz sin poner --args antes de cada uno, puede usar la sintaxis experimental de valores múltiples de Getopt::Long:

GetOptions("args=s{,}" => \@my_args);

Vea https://metacpan.org/module/Getopt::Long#Options-with-multiple-values

Respondido el 12 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.