• Publicidad

Validar variables pasadas por parámetro

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Validar variables pasadas por parámetro

Notapor xchidalgox » 2007-04-06 11:02 @501

Hola de nuevo

Me gustaría saber cuál es la forma, la mejor forma, la forma más usada o la que usan ustedes para validar que una variable pasada por parámetros al ejecutar el script exista y tenga valor.

Me explico.

Al ejecutar lo siguiente:

#perl myscript.pl --input=file.txt --data=hola --new_data=chao

Dentro del script admito como válido que las variables input, data y new_data existan y tengan valor. Sé que las variables están en $ARGV[]. Como dije antes ¿ cuál es la mejor forma de validar esto ?.

Saludos.
xchidalgox
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-04-02 11:23 @516

Publicidad

Notapor explorer » 2007-04-06 11:27 @519

Con un módulo como Getopt::Long puedes leer los argumentos dentro de tu programa.

Para el tema de saber si han sido declaradas o no, mira el ejemplo que hay en esta sección, y siguientes:
http://search.cpan.org/~jv/Getopt-Long- ... le_options
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor xchidalgox » 2007-04-06 12:13 @550

He conseguido lo que buscaba.

Gracias
xchidalgox
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-04-02 11:23 @516

Notapor xchidalgox » 2007-04-06 17:07 @754

Que estoy haciendo mal ??

El codigo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use Getopt::Long;

my $input = '';
my @pos  = '';

$result = GetOptions ("input=s" => \$input,
                     "pos=s{,}"   => \@pos,
                    );

die "Use:\n\t --input=input.txt\n\t --pos=x,y x1,y1 .. xn,yn \n\n" if $input eq '' or @pos eq '';
print @pos;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Asi ejecuto el script
#perl myscript --input=file.txt --pos=1,2 6,7
Error in option spec: "pos=s{,}"
#


Me aparece este error. Error in option spec: "pos=s{,}"

La variable pos puede recibir n posiciones.

Saludos.
xchidalgox
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-04-02 11:23 @516

Notapor explorer » 2007-04-06 18:11 @799

Pues... no lo sé...

Con Getopt::Long versión 2.36 y mi Perl versión 5.8.8, la siguiente versión de tu programa sí que me funciona bien:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l

use Getopt::Long;
use strict;
use warnings;

my $input = '';
my @pos   = ();

my $result = GetOptions(
    "input=s"  => \$input,
    "pos=s{,}" => \@pos,
);

die "Use:\n\t--input=input.txt\n\t--pos=x,y x1,y1 .. xn,yn \n\n"
    if $input eq '' or @pos == 0;

print "@pos";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Observa la inicialización y la comparación de la variable @pos. Hay que recordar que es un array, no un escalar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2007-04-06 18:43 @821

Intenta esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use Getopt::Long;

my $input;
my @pos;

my $result = GetOptions ("input=s" => \$input,
                     "pos=s\@"   => \@pos,
                    );

die "$0: Use:\n\t --input=input.txt\n\t --pos=x,y x1,y1 .. xn,yn \n\n" until @pos and $input;
print @pos;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A mi me funciona con los dos.

Algo más, al usar eso bien puede ejecutarlo como:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
./programa.pl -i input.txt -p x,y z,f
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor xchidalgox » 2007-04-06 19:35 @858

No se como ver la versión de Getopt::Long, ¿ cómo se hace ?

Estaba usando perl 5.8.4, me cambié a Perl 5.8.8 y me funciona con pos=s{,}.

Gracias.
xchidalgox
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-04-02 11:23 @516

Notapor creating021 » 2007-04-06 20:46 @906

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -MGetopt::Long -le 'print $Getopt::Long::VERSION;'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor xchidalgox » 2007-04-06 21:26 @935

Con la versión de Perl 5.8.4 y Getopt::Long 2.34 no se puede utilizar pos=s{,}.


Saludos.
xchidalgox
Perlero nuevo
Perlero nuevo
 
Mensajes: 23
Registrado: 2007-04-02 11:23 @516


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados

cron