• Publicidad

¿Existe "goto" en Perl?

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

¿Existe "goto" en Perl?

Notapor aramallal » 2007-08-08 05:23 @266

Buenos días , me interesaría poder saltar a una linea determinada en el caso de que me pasen argumentos con el script. ¿esto es posible? es decir:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if (@ARGV != " "){

   "salta a la linea 10" ;

}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Gracias y un saludo.
aramallal
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2007-06-12 06:29 @312

Publicidad

Notapor explorer » 2007-08-08 05:36 @275

Sí que existe.

Debes primero poner una etiqueta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
LINEA10:
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

en el lugar donde quieres que salte el goto.
Y luego, arriba, pones el goto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
goto LINEA10;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Aunque, naturalmente, todo programa con goto se puede reescribir para no tener que usarlo (es una de las lecciones que se aprende en las carreras de informática).

De hecho, se dice que Larry Wall nunca lo ha usado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor aramallal » 2007-08-08 06:19 @305

gracias explorer, entonces no la utilizaré.

Pero entonces ahora me viene la siguiente duda: yo quiero que se pasen parámetros a mi script pero sin utilizar eso me tengo que replantear otra historia. Por ejemplo, tengo 4 argumentos:
script -n (nombre firewall) -a (ip fw) -i (incondicional) -f -(fichero a restaurar)

Bueno, es decir, quiero que las dos primeras sean obligatorias y no podrían ir en blanco nunca. El parámetro -i es para forzar la instalación se puede poner o no y el cuarto lo mismo se puede poner o no.

Ahora, para controlar el orden, ¿cómo lo haría? ya que el @ARGV[0] corresponde a "-n" el @ARGV[1] al nombre del FW y así sucesivamente, pero en el caso de que no ponga la -i o que les cambie el orden ya no los puedo controlar, ¿verdad?

A ver si se os ocurre algo. Gracias y un saludo.
aramallal
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2007-06-12 06:29 @312

Notapor explorer » 2007-08-08 07:08 @339

Para estas cosas hay módulos de la familia Getopt, como por ejemplo Getopt::Std o Getopt::Long.

Con un par de líneas más en tu programa, este módulo leerá por ti los argumentos en no importa qué orden los haya puesto el usuario, y además te devolverá el valor de los argumentos. Luego, solo tendrás que hacer los if correspondientes para actuar en consecuencia.

Hay otros módulos que funciones más especiales, como lo de que hacer que ciertas opciones sean obligatorias y otras opcionales y otras que sean opcionales si aparecen otras opcionales, etc. etc.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor aramallal » 2007-08-09 06:14 @301

Buenos días, explorer. Siguiendo tu consejo de no utilizar goto y de utilizar el módulo Getopt::Long, me estoy volviendo loco aunque se que es la mejor forma. No consigo lo de los parámetros. Lo he intentado hacer manualmente pero es una locura y con lo poco que entiendo me he leído un poco el manual de este módulo y no he entendido mucho. Esto es lo que tengo en mi script, pero no funciona. Siempre me da un error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Getopt::Long;
GetOptions(
    'fichero=r' => \$restaurar ,
    'ip=a'      => \$ip
);

print $restaurar ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero nada, no funciona. Me sale Error in option spec: "fichero=r".............

Lo que me interesa es que solo funcionen los 4 parámetros, que el resto de cosas que pongas salga un error. ¿Veis algo? Gracias de antemano
aramallal
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2007-06-12 06:29 @312

Notapor explorer » 2007-08-09 07:20 @347

¿fichero=r? ¿Y qué tipo de dato es 'r'? No lo veo en la doc. Sólo es 's' para string, 'i' para entero y 'f' para flotante. Que yo sepa...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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